feat:日志修改
This commit is contained in:
1 parent
da3eee48c1
commit
5b9ef49564
5 files changed
+147
-49
No files matched your search
@@ -8,6 +8,7 @@ import 'package:logger/logger.dart';
|
||||
import 'package:pj_supermarket_cloud/common/index.dart';
|
||||
|
||||
final logger = Logger(
|
||||
filter: AppLogFilter(),
|
||||
printer: customPrinter,
|
||||
output: ConsoleOutput(),
|
||||
);
|
||||
@@ -18,38 +19,58 @@ final customPrinter = PrettyPrinter(
|
||||
colors: true,
|
||||
printEmojis: false,
|
||||
printTime: true,
|
||||
noBoxingByDefault: true,
|
||||
);
|
||||
|
||||
class AppLogFilter extends LogFilter {
|
||||
@override
|
||||
bool shouldLog(LogEvent event) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class ConsoleOutput extends LogOutput {
|
||||
String? _filePath;
|
||||
IOSink? _sink;
|
||||
Timer? _timer;
|
||||
Future<void> _queue = Future.value();
|
||||
|
||||
Future<void> _enqueue(Future<void> Function() action) {
|
||||
_queue = _queue.then((_) => action()).catchError((e, stack) {
|
||||
print("写入日志错误error:|$e|stack:|$stack|");
|
||||
});
|
||||
return _queue;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> init() async {
|
||||
try {
|
||||
// 关闭旧的sink并创建新的
|
||||
await _sink?.flush();
|
||||
await _sink?.close();
|
||||
_filePath = await AppFileTool.getLoggerBackupPath();
|
||||
if (ObjectUtil.isNotEmpty(_filePath)) {
|
||||
_sink = File(_filePath!).openWrite(
|
||||
mode: FileMode.writeOnlyAppend,
|
||||
encoding: utf8,
|
||||
);
|
||||
}
|
||||
await _enqueue(() async {
|
||||
await _sink?.flush();
|
||||
await _sink?.close();
|
||||
_filePath = await AppFileTool.getLoggerBackupPath();
|
||||
if (ObjectUtil.isNotEmpty(_filePath)) {
|
||||
_sink = File(_filePath!).openWrite(
|
||||
mode: FileMode.writeOnlyAppend,
|
||||
encoding: utf8,
|
||||
);
|
||||
} else {
|
||||
_sink = null;
|
||||
}
|
||||
});
|
||||
_timer = Timer.periodic(const Duration(seconds: 60 * 60 * 2),
|
||||
(Timer timer) async {
|
||||
final path = await AppFileTool.getLoggerBackupPath();
|
||||
if (path == null) return;
|
||||
// 关闭旧的sink并创建新的
|
||||
await _sink?.flush();
|
||||
await _sink?.close();
|
||||
_filePath = path;
|
||||
_sink = File(_filePath!).openWrite(
|
||||
mode: FileMode.writeOnlyAppend,
|
||||
encoding: utf8,
|
||||
);
|
||||
unawaited(_enqueue(() async {
|
||||
await _sink?.flush();
|
||||
await _sink?.close();
|
||||
_filePath = path;
|
||||
_sink = File(_filePath!).openWrite(
|
||||
mode: FileMode.writeOnlyAppend,
|
||||
encoding: utf8,
|
||||
);
|
||||
}));
|
||||
});
|
||||
} catch (e, stack) {
|
||||
print("初始化日志错误error:|$e|stack:|$stack|");
|
||||
@@ -58,9 +79,13 @@ class ConsoleOutput extends LogOutput {
|
||||
|
||||
@override
|
||||
Future<void> destroy() async {
|
||||
await _sink?.flush();
|
||||
await _sink?.close();
|
||||
_timer?.cancel();
|
||||
_timer = null;
|
||||
await _enqueue(() async {
|
||||
await _sink?.flush();
|
||||
await _sink?.close();
|
||||
_sink = null;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -70,12 +95,14 @@ class ConsoleOutput extends LogOutput {
|
||||
for (final v in event.lines) {
|
||||
print(v);
|
||||
}
|
||||
} else {
|
||||
if (_filePath == null) return;
|
||||
if (_sink == null) return;
|
||||
if (Level.debug == event.level) return;
|
||||
_sink?.writeAll(event.lines, '\n');
|
||||
}
|
||||
unawaited(_enqueue(() async {
|
||||
if (_filePath == null || _sink == null) return;
|
||||
if (Level.debug == event.level) return;
|
||||
_sink!.writeAll(event.lines, '\n');
|
||||
_sink!.writeln();
|
||||
await _sink!.flush();
|
||||
}));
|
||||
} catch (e, stack) {
|
||||
print("写入日志错误error:|$e|stack:|$stack|");
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user