Structured logging
- Dart kursu
- İleri seviye
- Ders 65/83
- 5 dk
Structured logging ve JSON formatını öğrenirsin.
Yapılandırılmış günlükleme
Yapılandırılmış günlükleme (structured logging), kayıtları düz metin yerine yapılandırılmış veri olarak tutar. Genellikle JSON biçiminde olur; her kayıt seviye, mesaj, zaman damgası ve ek veri alanları içerir. Bu, kayıtları aramayı ve denetlemeyi kolaylaştırır.
Dart'ta bunu dart:convert'tan jsonEncode ile yaparsın. Handler içinde jsonEncode({'level': r.level.name, 'msg': r.message}) çağrısı bir JSON dizesi üretir. Bu, günlükleri bir sisteme (örneğin ELK yığınına) göndermek için standart biçimdir.
JSON kayıt alanları
Yapılandırılmış bir günlük kaydı genellikle şu alanları içerir: level (seviye), msg (mesaj), ts (zaman damgası), logger (kaynak). Bu alanlar bir Map olarak toplanır ve jsonEncode ile JSON'a çevrilir.
Örnek: jsonEncode({'logger': r.loggerName, 'level': r.level.name, 'msg': r.message}). Bu, {"logger":"uygulama","level":"INFO","msg":"başladı"} gibi bir JSON üretir. Bu biçim, günlük toplama sistemleri tarafından kolayca ayrıştırılır (parse); düz metinden çok daha makine dostudur.
Uygulama JSON günlük kaydı
import 'dart:convert'; ve import 'package:logging/logging.dart'; ekle. main içinde Logger.root.level = Level.INFO; ve handler ekle: Logger.root.onRecord.listen((r) { final record = jsonEncode({'level': r.level.name, 'msg': r.message}); print(record); });. final log = Logger('uygulama'); oluştur ve log.info('başladı') çağır.
Başlangıç kodu
// dart:convert ve logging paketini içe aktar
void main() {
// handler içinde jsonEncode ile yapılandırılmış kayıt yazdır
}Örnek çözüm
import 'dart:convert';
import 'package:logging/logging.dart';
void main() {
Logger.root.level = Level.INFO;
Logger.root.onRecord.listen((r) {
final record = jsonEncode({'level': r.level.name, 'msg': r.message});
print(record);
});
final log = Logger('uygulama');
log.info('başladı');
}Beklenen çıktı
{"level":"INFO","msg":"başladı"}
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 jsonEncode çağrısı
var record = ____({'level': 'INFO', 'msg': 'başladı'});
var record = jsonEncode({'level': 'INFO', 'msg': 'başladı'});
Açıklama: jsonEncode Map'i JSON dizesine çevirir.
2 Yapılandırılmış alanları eşleştir
| Kavram | Anlamı |
|---|---|
jsonEncode |
JSON çıktı |
level |
Seviye |
msg |
Mesaj |
logger |
Kaynak |
3 Yapılandırılmış günlükleme hangi biçimde olur?
- JSON Doğru cevap
- HTML
- Düz metin
- CSV
Açıklama: yapılandırılmış günlükleme genellikle JSON biçiminde olur.