CodeBlanks Logo Icon CodeBlanks

Structured logging

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

main.dart
// 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

main.dart
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ı

Soru
var record = ____({'level': 'INFO', 'msg': 'başladı'});
Cevap
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.

İleri seviye bölümündeki tüm dersler