import 'dart:collection'; import 'dart:io'; import 'package:flutter/foundation.dart'; enum LogSeviye { bilgi, uyari, hata, debug } /// Merkezi logger: konsola, halka tampona ve opsiyonel disk dosyasına yazar. class Log { static final Queue _halka = Queue(); static const int _maxSatir = 4000; static File? _dosya; static final List _dinleyiciler = []; /// Disk dosyasına yazmayı etkinleştirir. static Future dosyaBaslat(File dosya) async { _dosya = dosya; if (!await dosya.parent.exists()) { await dosya.parent.create(recursive: true); } } static void dinle(void Function(String satir) cb) { _dinleyiciler.add(cb); } static void dinlemeyi_birak(void Function(String) cb) { _dinleyiciler.remove(cb); } static void _yaz(LogSeviye s, String etiket, String mesaj) { final t = DateTime.now().toIso8601String(); final satir = '$t [${s.name.toUpperCase()}] $etiket: $mesaj'; if (kDebugMode) { // ignore: avoid_print print(satir); } _halka.add(satir); while (_halka.length > _maxSatir) { _halka.removeFirst(); } _dosya?.writeAsString('$satir\n', mode: FileMode.append); for (final cb in _dinleyiciler) { try { cb(satir); } catch (_) {} } } static void bilgi(String etiket, String m) => _yaz(LogSeviye.bilgi, etiket, m); static void uyari(String etiket, String m) => _yaz(LogSeviye.uyari, etiket, m); static void hata(String etiket, String m) => _yaz(LogSeviye.hata, etiket, m); static void debug(String etiket, String m) => _yaz(LogSeviye.debug, etiket, m); static List sonSatirlar({int n = 200}) { final liste = _halka.toList(); if (liste.length <= n) return List.of(liste); return liste.sublist(liste.length - n); } }