chore(mobile): rename log enum to lowercase (#16476)

* chore(mobile): rename log enum to lowercase

* chore(mobile): do not abbreviate

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong 2025-03-02 18:00:48 +05:30 committed by GitHub
parent 6cc1978b2d
commit d8d87bb565
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 80 additions and 89 deletions

View File

@ -1,19 +1,15 @@
// ignore_for_file: constant_identifier_names
import 'package:logging/logging.dart';
/// Log levels according to dart logging [Level] /// Log levels according to dart logging [Level]
enum LogLevel { enum LogLevel {
ALL, all,
FINEST, finest,
FINER, finer,
FINE, fine,
CONFIG, config,
INFO, info,
WARNING, warning,
SEVERE, severe,
SHOUT, shout,
OFF, off,
} }
class LogMessage { class LogMessage {

View File

@ -39,29 +39,29 @@ class LogService {
} }
static Future<LogService> init({ static Future<LogService> init({
required ILogRepository logRepo, required ILogRepository logRepository,
required IStoreRepository storeRepo, required IStoreRepository storeRepository,
bool shouldBuffer = true, bool shouldBuffer = true,
}) async { }) async {
if (_instance != null) { if (_instance != null) {
return _instance!; return _instance!;
} }
_instance = await create( _instance = await create(
logRepo: logRepo, logRepository: logRepository,
storeRepo: storeRepo, storeRepository: storeRepository,
shouldBuffer: shouldBuffer, shouldBuffer: shouldBuffer,
); );
return _instance!; return _instance!;
} }
static Future<LogService> create({ static Future<LogService> create({
required ILogRepository logRepo, required ILogRepository logRepository,
required IStoreRepository storeRepo, required IStoreRepository storeRepository,
bool shouldBuffer = true, bool shouldBuffer = true,
}) async { }) async {
final instance = LogService._(logRepo, storeRepo, shouldBuffer); final instance = LogService._(logRepository, storeRepository, shouldBuffer);
// Truncate logs to 250 // Truncate logs to 250
await logRepo.truncate(limit: kLogTruncateLimit); await logRepository.truncate(limit: kLogTruncateLimit);
// Get log level from store // Get log level from store
final level = await instance._storeRepository.tryGet(StoreKey.logLevel); final level = await instance._storeRepository.tryGet(StoreKey.logLevel);
if (level != null) { if (level != null) {
@ -145,7 +145,7 @@ class LoggerUnInitializedException implements Exception {
extension LevelDomainToInfraExtension on Level { extension LevelDomainToInfraExtension on Level {
LogLevel toLogLevel() => LogLevel toLogLevel() =>
LogLevel.values.elementAtOrNull(Level.LEVELS.indexOf(this)) ?? LogLevel.values.elementAtOrNull(Level.LEVELS.indexOf(this)) ??
LogLevel.INFO; LogLevel.info;
} }
extension on LogLevel { extension on LogLevel {

View File

@ -5,29 +5,24 @@ part 'log.entity.g.dart';
@Collection(inheritance: false) @Collection(inheritance: false)
class LoggerMessage { class LoggerMessage {
Id id = Isar.autoIncrement; final Id id = Isar.autoIncrement;
String message; final String message;
String? details; final String? details;
@Enumerated(EnumType.ordinal) @Enumerated(EnumType.ordinal)
LogLevel level = LogLevel.INFO; final LogLevel level;
DateTime createdAt; final DateTime createdAt;
String? context1; final String? context1;
String? context2; final String? context2;
LoggerMessage({ const LoggerMessage({
required this.message, required this.message,
required this.details, required this.details,
required this.level, this.level = LogLevel.info,
required this.createdAt, required this.createdAt,
required this.context1, required this.context1,
required this.context2, required this.context2,
}); });
@override
String toString() {
return 'LoggerMessage(message: $message, level: $level, createdAt: $createdAt)';
}
LogMessage toDto() { LogMessage toDto() {
return LogMessage( return LogMessage(
message: message, message: message,

View File

@ -117,10 +117,9 @@ LoggerMessage _loggerMessageDeserialize(
createdAt: reader.readDateTime(offsets[2]), createdAt: reader.readDateTime(offsets[2]),
details: reader.readStringOrNull(offsets[3]), details: reader.readStringOrNull(offsets[3]),
level: _LoggerMessagelevelValueEnumMap[reader.readByteOrNull(offsets[4])] ?? level: _LoggerMessagelevelValueEnumMap[reader.readByteOrNull(offsets[4])] ??
LogLevel.ALL, LogLevel.info,
message: reader.readString(offsets[5]), message: reader.readString(offsets[5]),
); );
object.id = id;
return object; return object;
} }
@ -141,7 +140,7 @@ P _loggerMessageDeserializeProp<P>(
return (reader.readStringOrNull(offset)) as P; return (reader.readStringOrNull(offset)) as P;
case 4: case 4:
return (_LoggerMessagelevelValueEnumMap[reader.readByteOrNull(offset)] ?? return (_LoggerMessagelevelValueEnumMap[reader.readByteOrNull(offset)] ??
LogLevel.ALL) as P; LogLevel.info) as P;
case 5: case 5:
return (reader.readString(offset)) as P; return (reader.readString(offset)) as P;
default: default:
@ -150,28 +149,28 @@ P _loggerMessageDeserializeProp<P>(
} }
const _LoggerMessagelevelEnumValueMap = { const _LoggerMessagelevelEnumValueMap = {
'ALL': 0, 'all': 0,
'FINEST': 1, 'finest': 1,
'FINER': 2, 'finer': 2,
'FINE': 3, 'fine': 3,
'CONFIG': 4, 'config': 4,
'INFO': 5, 'info': 5,
'WARNING': 6, 'warning': 6,
'SEVERE': 7, 'severe': 7,
'SHOUT': 8, 'shout': 8,
'OFF': 9, 'off': 9,
}; };
const _LoggerMessagelevelValueEnumMap = { const _LoggerMessagelevelValueEnumMap = {
0: LogLevel.ALL, 0: LogLevel.all,
1: LogLevel.FINEST, 1: LogLevel.finest,
2: LogLevel.FINER, 2: LogLevel.finer,
3: LogLevel.FINE, 3: LogLevel.fine,
4: LogLevel.CONFIG, 4: LogLevel.config,
5: LogLevel.INFO, 5: LogLevel.info,
6: LogLevel.WARNING, 6: LogLevel.warning,
7: LogLevel.SEVERE, 7: LogLevel.severe,
8: LogLevel.SHOUT, 8: LogLevel.shout,
9: LogLevel.OFF, 9: LogLevel.off,
}; };
Id _loggerMessageGetId(LoggerMessage object) { Id _loggerMessageGetId(LoggerMessage object) {
@ -183,9 +182,7 @@ List<IsarLinkBase<dynamic>> _loggerMessageGetLinks(LoggerMessage object) {
} }
void _loggerMessageAttach( void _loggerMessageAttach(
IsarCollection<dynamic> col, Id id, LoggerMessage object) { IsarCollection<dynamic> col, Id id, LoggerMessage object) {}
object.id = id;
}
extension LoggerMessageQueryWhereSort extension LoggerMessageQueryWhereSort
on QueryBuilder<LoggerMessage, LoggerMessage, QWhere> { on QueryBuilder<LoggerMessage, LoggerMessage, QWhere> {

View File

@ -5,8 +5,9 @@ part 'store.entity.g.dart';
/// Internal class for `Store`, do not use elsewhere. /// Internal class for `Store`, do not use elsewhere.
@Collection(inheritance: false) @Collection(inheritance: false)
class StoreValue { class StoreValue {
const StoreValue(this.id, {this.intValue, this.strValue});
final Id id; final Id id;
final int? intValue; final int? intValue;
final String? strValue; final String? strValue;
const StoreValue(this.id, {this.intValue, this.strValue});
} }

View File

@ -41,16 +41,16 @@ class AppLogPage extends HookConsumerWidget {
} }
Widget buildLeadingIcon(LogLevel level) => switch (level) { Widget buildLeadingIcon(LogLevel level) => switch (level) {
LogLevel.INFO => colorStatusIndicator(context.primaryColor), LogLevel.info => colorStatusIndicator(context.primaryColor),
LogLevel.SEVERE => colorStatusIndicator(Colors.redAccent), LogLevel.severe => colorStatusIndicator(Colors.redAccent),
LogLevel.WARNING => colorStatusIndicator(Colors.orangeAccent), LogLevel.warning => colorStatusIndicator(Colors.orangeAccent),
_ => colorStatusIndicator(Colors.grey), _ => colorStatusIndicator(Colors.grey),
}; };
Color getTileColor(LogLevel level) => switch (level) { Color getTileColor(LogLevel level) => switch (level) {
LogLevel.INFO => Colors.transparent, LogLevel.info => Colors.transparent,
LogLevel.SEVERE => Colors.redAccent.withOpacity(0.25), LogLevel.severe => Colors.redAccent.withOpacity(0.25),
LogLevel.WARNING => Colors.orangeAccent.withOpacity(0.25), LogLevel.warning => Colors.orangeAccent.withOpacity(0.25),
_ => context.primaryColor.withOpacity(0.1), _ => context.primaryColor.withOpacity(0.1),
}; };

View File

@ -49,8 +49,8 @@ abstract final class Bootstrap {
static Future<void> initDomain(Isar db) async { static Future<void> initDomain(Isar db) async {
await StoreService.init(storeRepository: IsarStoreRepository(db)); await StoreService.init(storeRepository: IsarStoreRepository(db));
await LogService.init( await LogService.init(
logRepo: IsarLogRepository(db), logRepository: IsarLogRepository(db),
storeRepo: IsarStoreRepository(db), storeRepository: IsarStoreRepository(db),
); );
} }
} }

View File

@ -14,14 +14,14 @@ import '../../test_utils.dart';
final _kInfoLog = LogMessage( final _kInfoLog = LogMessage(
message: '#Info Message', message: '#Info Message',
level: LogLevel.INFO, level: LogLevel.info,
createdAt: DateTime(2025, 2, 26), createdAt: DateTime(2025, 2, 26),
logger: 'Info Logger', logger: 'Info Logger',
); );
final _kWarnLog = LogMessage( final _kWarnLog = LogMessage(
message: '#Warn Message', message: '#Warn Message',
level: LogLevel.WARNING, level: LogLevel.warning,
createdAt: DateTime(2025, 2, 27), createdAt: DateTime(2025, 2, 27),
logger: 'Warn Logger', logger: 'Warn Logger',
); );
@ -40,13 +40,15 @@ void main() {
when(() => mockLogRepo.truncate(limit: any(named: 'limit'))) when(() => mockLogRepo.truncate(limit: any(named: 'limit')))
.thenAnswer((_) async => {}); .thenAnswer((_) async => {});
when(() => mockStoreRepo.tryGet<int>(StoreKey.logLevel)) when(() => mockStoreRepo.tryGet<int>(StoreKey.logLevel))
.thenAnswer((_) async => LogLevel.FINE.index); .thenAnswer((_) async => LogLevel.fine.index);
when(() => mockLogRepo.getAll()).thenAnswer((_) async => []); when(() => mockLogRepo.getAll()).thenAnswer((_) async => []);
when(() => mockLogRepo.insert(any())).thenAnswer((_) async => true); when(() => mockLogRepo.insert(any())).thenAnswer((_) async => true);
when(() => mockLogRepo.insertAll(any())).thenAnswer((_) async => true); when(() => mockLogRepo.insertAll(any())).thenAnswer((_) async => true);
sut = sut = await LogService.create(
await LogService.create(logRepo: mockLogRepo, storeRepo: mockStoreRepo); logRepository: mockLogRepo,
storeRepository: mockStoreRepo,
);
}); });
tearDown(() async { tearDown(() async {
@ -72,14 +74,14 @@ void main() {
setUp(() async { setUp(() async {
when(() => mockStoreRepo.insert<int>(StoreKey.logLevel, any())) when(() => mockStoreRepo.insert<int>(StoreKey.logLevel, any()))
.thenAnswer((_) async => true); .thenAnswer((_) async => true);
await sut.setlogLevel(LogLevel.SHOUT); await sut.setlogLevel(LogLevel.shout);
}); });
test('Updates the log level in store', () { test('Updates the log level in store', () {
final index = verify( final index = verify(
() => mockStoreRepo.insert<int>(StoreKey.logLevel, captureAny()), () => mockStoreRepo.insert<int>(StoreKey.logLevel, captureAny()),
).captured.firstOrNull; ).captured.firstOrNull;
expect(index, LogLevel.SHOUT.index); expect(index, LogLevel.shout.index);
}); });
test('Sets log level on logger', () { test('Sets log level on logger', () {
@ -91,8 +93,8 @@ void main() {
test('Buffers logs until timer elapses', () { test('Buffers logs until timer elapses', () {
TestUtils.fakeAsync((time) async { TestUtils.fakeAsync((time) async {
sut = await LogService.create( sut = await LogService.create(
logRepo: mockLogRepo, logRepository: mockLogRepo,
storeRepo: mockStoreRepo, storeRepository: mockStoreRepo,
shouldBuffer: true, shouldBuffer: true,
); );
@ -109,8 +111,8 @@ void main() {
test('Batch inserts all logs on timer', () { test('Batch inserts all logs on timer', () {
TestUtils.fakeAsync((time) async { TestUtils.fakeAsync((time) async {
sut = await LogService.create( sut = await LogService.create(
logRepo: mockLogRepo, logRepository: mockLogRepo,
storeRepo: mockStoreRepo, storeRepository: mockStoreRepo,
shouldBuffer: true, shouldBuffer: true,
); );
@ -131,8 +133,8 @@ void main() {
test('Does not buffer when off', () { test('Does not buffer when off', () {
TestUtils.fakeAsync((time) async { TestUtils.fakeAsync((time) async {
sut = await LogService.create( sut = await LogService.create(
logRepo: mockLogRepo, logRepository: mockLogRepo,
storeRepo: mockStoreRepo, storeRepository: mockStoreRepo,
shouldBuffer: false, shouldBuffer: false,
); );
@ -165,8 +167,8 @@ void main() {
test('Combines result from both DB + Buffer', () { test('Combines result from both DB + Buffer', () {
TestUtils.fakeAsync((time) async { TestUtils.fakeAsync((time) async {
sut = await LogService.create( sut = await LogService.create(
logRepo: mockLogRepo, logRepository: mockLogRepo,
storeRepo: mockStoreRepo, storeRepository: mockStoreRepo,
shouldBuffer: true, shouldBuffer: true,
); );

View File

@ -72,8 +72,8 @@ void main() {
await StoreService.init(storeRepository: IsarStoreRepository(db)); await StoreService.init(storeRepository: IsarStoreRepository(db));
await Store.put(StoreKey.currentUser, owner); await Store.put(StoreKey.currentUser, owner);
await LogService.init( await LogService.init(
logRepo: IsarLogRepository(db), logRepository: IsarLogRepository(db),
storeRepo: IsarStoreRepository(db), storeRepository: IsarStoreRepository(db),
); );
}); });
final List<Asset> initialAssets = [ final List<Asset> initialAssets = [