import 'package:flutter/foundation.dart'; import 'package:logger/logger.dart'; import '../api/api_config.dart'; /// 统一应用日志,提升可读性:时间戳、级别、标签、格式化输出。 /// /// [Logger] 默认 [DevelopmentFilter] 依赖 `assert`,在 release/profile 下会屏蔽**全部**日志。 /// 正式包排障时设 [ApiConfig.debugLogs]=true,此处改用 [ProductionFilter] 才可见 debug/info。 /// release 且 debugLogs=false 时仍不输出(warning 也会被 filter 掉,与原先行为一致)。 /// /// 使用示例: /// final _log = AppLogger('GenerateVideo'); /// _log.d('task: $task'); /// _log.e('Generate failed', e, st); class AppLogger { AppLogger([this.tag = 'App']); final String tag; static Logger? _logger; static Logger get _instance { _logger ??= Logger( filter: (!kDebugMode && ApiConfig.debugLogs) ? ProductionFilter() : DevelopmentFilter(), printer: PrettyPrinter( methodCount: 0, errorMethodCount: 6, lineLength: 80, colors: true, printEmojis: true, dateTimeFormat: DateTimeFormat.onlyTimeAndSinceStart, ), level: (kDebugMode || ApiConfig.debugLogs) ? Level.trace : Level.warning, ); return _logger!; } String _msg(Object? message) => '[$tag] $message'; void d(Object? message) => _instance.d(_msg(message)); void i(Object? message) => _instance.i(_msg(message)); void w(Object? message) => _instance.w(_msg(message)); void e(Object? message, [Object? error, StackTrace? stackTrace]) => _instance.e(_msg(message), error: error, stackTrace: stackTrace); }