49 lines
1.6 KiB
Dart
49 lines
1.6 KiB
Dart
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);
|
||
}
|