CodeBlanks Logo Icon CodeBlanks

Handler

Log handler ve çıktı hedefleri öğrenirsin.

Handler

Bir handler (ele alıcı), günlük kayıtlarını işleyen fonksiyondur. Logger.root.onRecord bir Stream<LogRecord>'tir; .listen(...) ile handler eklersin. Handler kaydı alır ve ekrana, dosyaya veya uzak sunucuya yazar.

Örnek: Logger.root.onRecord.listen((r) => print(r.message));. Bu handler her kaydın mesajını ekrana yazdırır. Birden çok handler ekleyebilirsin; her biri farklı hedefe yazar. Örneğin biri konsola, biri dosyaya, biri uzak servise. Bu, günlükleme çıktısını esnek yönetmenin yoludur.

Çoklu handler

onRecord.listen birden çok kez çağrılabilir; her çağrı yeni bir handler ekler. Bu, kayıtları aynı anda birden çok yere göndermenin yoludur. Örneğin biri konsola yazdırırken diğeri bir sayacı artırabilir.

Örnek: Logger.root.onRecord.listen((r) => print('konsol: ${r.message}')); ve Logger.root.onRecord.listen((r) => count++);. İlk handler konsola yazar; ikincisi bir sayacı artırır. İki handler da her kayıtta çalışır. Bu, günlüklemenin esnekliğini gösterir; tek kayıt akışı farklı amaçlara hizmet edebilir.

Uygulama İki handler ekle

import 'package:logging/logging.dart'; ekle. main içinde var count = 0; ve Logger.root.level = Level.INFO; ekle. İki handler ekle: biri print('konsol: ${r.message}') yapsın, diğeri count++ yapsın. final log = Logger('uygulama'); oluştur ve log.info('birinci'), log.info('ikinci') çağır. En son print('sayı: $count') ekle.

Başlangıç kodu

main.dart
// logging paketini içe aktar

void main() {
  // iki handler ekle: konsola yazdırma ve sayıcı, iki kayıt logla, sayıyı yazdır
}

Örnek çözüm

main.dart
import 'package:logging/logging.dart';

void main() {
  var count = 0;
  Logger.root.level = Level.INFO;
  Logger.root.onRecord.listen((r) => print('konsol: ${r.message}'));
  Logger.root.onRecord.listen((r) => count++);
  final log = Logger('uygulama');
  log.info('birinci');
  log.info('ikinci');
  print('sayı: $count');
}

Beklenen çıktı

konsol: birinci
konsol: ikinci
sayı: 2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 onRecord ne türdür?

  • String
  • void
  • int
  • Stream<LogRecord> Doğru cevap

Açıklama: onRecord bir Stream<LogRecord>'dur.

2 Handler parçalarını eşleştir

Kavram Anlamı
onRecord Kayıt akışı
listen Handler ekler
LogRecord Kayıt nesnesi
Stream Akış

3 listen çağrısı

Soru
Logger.root.onRecord.____((r) => print(r));
Cevap
Logger.root.onRecord.listen((r) => print(r));

Açıklama: onRecord.listen ile handler eklenir.

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