Handler
- Dart kursu
- İleri seviye
- Ders 64/83
- 5 dk
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
// 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
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ı
Logger.root.onRecord.____((r) => print(r));
Logger.root.onRecord.listen((r) => print(r));
Açıklama: onRecord.listen ile handler eklenir.