Skip to content

Commit d0db642

Browse files
committed
[mixin_logger] add setLoggerFileLeading api
1 parent ef6ae3d commit d0db642

File tree

5 files changed

+45
-2
lines changed

5 files changed

+45
-2
lines changed

packages/mixin_logger/lib/mixin_logger.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ Future<void> initLogger(
8484
await platform.initLogger(logDir, maxFileCount, maxFileLength, fileLeading);
8585
}
8686

87+
void setLoggerFileLeading(String? leading) {
88+
platform.setLoggerFileLeading(leading);
89+
}
90+
8791
void v(String message) {
8892
_print(message, _LogLevel.verbose);
8993
}

packages/mixin_logger/lib/src/log_file_manager.dart

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import 'dart:ui';
88
import 'package:flutter/foundation.dart';
99
import 'package:path/path.dart' as p;
1010

11+
@immutable
12+
class _UpdateFileLeading {
13+
const _UpdateFileLeading(this.content);
14+
15+
final String? content;
16+
}
17+
1118
abstract class LogFileManager {
1219
static LogFileManager? _instance;
1320

@@ -78,12 +85,18 @@ abstract class LogFileManager {
7885
messageReceiver.listen((message) {
7986
if (message is String) {
8087
logFileHandler.write(message);
88+
} else if (message is _UpdateFileLeading) {
89+
logFileHandler.fileLeading = message.content;
90+
} else {
91+
assert(false, 'unknown message: $message');
8192
}
8293
});
8394
responsePort.send(messageReceiver.sendPort);
8495
}
8596

8697
Future<void> write(String message);
98+
99+
void setLoggerFileLeading(String? fileLeading);
87100
}
88101

89102
class _LogFileMangerForOtherIsolate implements LogFileManager {
@@ -95,6 +108,11 @@ class _LogFileMangerForOtherIsolate implements LogFileManager {
95108
Future<void> write(String message) async {
96109
_sendPort.send(message);
97110
}
111+
112+
@override
113+
void setLoggerFileLeading(String? fileLeading) {
114+
_sendPort.send(_UpdateFileLeading(fileLeading));
115+
}
98116
}
99117

100118
class _LogFileManagerForLogIsolate implements LogFileManager {
@@ -107,6 +125,11 @@ class _LogFileManagerForLogIsolate implements LogFileManager {
107125
handler.write(message);
108126
return Future.value();
109127
}
128+
129+
@override
130+
void setLoggerFileLeading(String? fileLeading) {
131+
handler.fileLeading = fileLeading;
132+
}
110133
}
111134

112135
final _fileNameRegex = RegExp(r'^log_\d+.log$');
@@ -209,7 +232,7 @@ class LogFileHandler {
209232

210233
final int maxFileLength;
211234

212-
final String? fileLeading;
235+
String? fileLeading;
213236

214237
void write(String message) {
215238
assert(_logFile != null, 'Log file is null');

packages/mixin_logger/lib/src/write_log_to_file_io.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,8 @@ Future<void> initLogger(
2121
fileLeading: fileLeading,
2222
);
2323
}
24+
25+
void setLoggerFileLeading(String? fileLeading) {
26+
assert(LogFileManager.instance != null, 'Logger is not initialized');
27+
LogFileManager.instance?.setLoggerFileLeading(fileLeading);
28+
}

packages/mixin_logger/lib/src/write_log_to_file_web.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ Future<void> initLogger(
1010
int maxFileLength,
1111
String? fileLeading,
1212
) async {}
13+
14+
void setLoggerFileLeading(String? fileLeading) {}

packages/mixin_logger/test/mixin_logger_test.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ void main() {
140140
test('write file leading', () async {
141141
await LogFileManager.init(dir, 10, 200, fileLeading: 'file_leading_test');
142142

143-
for (var i = 0; i < 100; i++) {
143+
for (var i = 0; i < 50; i++) {
144144
LogFileManager.instance!.write('test $i');
145145
}
146146
await Future.delayed(const Duration(milliseconds: 1000));
@@ -150,6 +150,15 @@ void main() {
150150
expect(fileContent1, startsWith('file_leading_test'));
151151
final fileContent2 = File(p.join(dir, 'log_2.log')).readAsStringSync();
152152
expect(fileContent2, startsWith('file_leading_test'));
153+
setLoggerFileLeading('new_file_leading');
154+
for (var i = 0; i < 50; i++) {
155+
LogFileManager.instance!.write('test $i');
156+
}
157+
await Future.delayed(const Duration(milliseconds: 1000));
158+
final fileContent3 = File(p.join(dir, 'log_3.log')).readAsStringSync();
159+
expect(fileContent3, startsWith('new_file_leading'));
160+
final fileContent4 = File(p.join(dir, 'log_4.log')).readAsStringSync();
161+
expect(fileContent4, startsWith('new_file_leading'));
153162
});
154163
}
155164

0 commit comments

Comments
 (0)