From 5758749bd14f820e0b2d2bea2dde4990757a3f01 Mon Sep 17 00:00:00 2001 From: otsmr Date: Sun, 30 Nov 2025 10:27:13 +0100 Subject: [PATCH] improve logging --- lib/src/database/daos/messages.dao.dart | 3 +- lib/src/database/daos/receipts.dao.dart | 2 +- lib/src/services/api.service.dart | 4 --- lib/src/services/fcm.service.dart | 7 ++++ lib/src/utils/log.dart | 47 +++++++++++++++++++++++-- 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/lib/src/database/daos/messages.dao.dart b/lib/src/database/daos/messages.dao.dart index 97bd5b7..7269054 100644 --- a/lib/src/database/daos/messages.dao.dart +++ b/lib/src/database/daos/messages.dao.dart @@ -115,7 +115,7 @@ class MessagesDao extends DatabaseAccessor with _$MessagesDaoMixin { milliseconds: group.deleteMessagesAfterMilliseconds, ), ); - final affected = await (delete(messages) + await (delete(messages) ..where( (m) => m.groupId.equals(group.groupId) & @@ -127,7 +127,6 @@ class MessagesDao extends DatabaseAccessor with _$MessagesDaoMixin { m.createdAt.isSmallerThanValue(deletionTime))), )) .go(); - Log.info('Deleted $affected messages.'); } } diff --git a/lib/src/database/daos/receipts.dao.dart b/lib/src/database/daos/receipts.dao.dart index 8b44397..34c05e2 100644 --- a/lib/src/database/daos/receipts.dao.dart +++ b/lib/src/database/daos/receipts.dao.dart @@ -62,7 +62,7 @@ class ReceiptsDao extends DatabaseAccessor with _$ReceiptsDaoMixin { return await (select(receipts)..where((t) => t.rowId.equals(id))) .getSingle(); } catch (e) { - Log.error(e); + // ignore error, receipts is already in the database... return null; } } diff --git a/lib/src/services/api.service.dart b/lib/src/services/api.service.dart index c595be4..b434fa2 100644 --- a/lib/src/services/api.service.dart +++ b/lib/src/services/api.service.dart @@ -283,10 +283,6 @@ class ApiService { request.v0.seq = seq; final requestBytes = request.writeToBuffer(); - Log.info( - 'Sending ${requestBytes.length} bytes to the server via WebSocket.', - ); - if (ensureRetransmission) { await addToRetransmissionBuffer(seq, requestBytes); } diff --git a/lib/src/services/fcm.service.dart b/lib/src/services/fcm.service.dart index 33ffaa8..df3ebc5 100644 --- a/lib/src/services/fcm.service.dart +++ b/lib/src/services/fcm.service.dart @@ -22,6 +22,13 @@ Future initFCMAfterAuthenticated() async { final storedToken = await storage.read(key: SecureStorageKeys.googleFcm); try { + if (Platform.isIOS) { + final apnsToken = await FirebaseMessaging.instance.getAPNSToken(); + if (apnsToken == null) { + Log.error('Error getting apnsToken'); + return; + } + } final fcmToken = await FirebaseMessaging.instance.getToken(); if (fcmToken == null) { Log.error('Error getting fcmToken'); diff --git a/lib/src/utils/log.dart b/lib/src/utils/log.dart index fa9c34c..7bd51f7 100644 --- a/lib/src/utils/log.dart +++ b/lib/src/utils/log.dart @@ -18,10 +18,24 @@ void initLogger() { ); } }); + cleanLogFile(); } class Log { - static void error(Object? message, [Object? error, StackTrace? stackTrace]) { + static String filterLogMessage(String msg) { + if (msg.contains("SqliteException")) { + // Do not log data which would be inserted into the DB. + return msg.substring(0, msg.indexOf("parameters: ")); + } + return msg; + } + + static void error( + Object? messageInput, [ + Object? error, + StackTrace? stackTrace, + ]) { + final message = filterLogMessage('$messageInput'); if (globalAllowErrorTrackingViaSentry) { try { throw Exception(message); @@ -32,11 +46,21 @@ class Log { Logger(_getCallerSourceCodeFilename()).shout(message, error, stackTrace); } - static void warn(Object? message, [Object? error, StackTrace? stackTrace]) { + static void warn( + Object? messageInput, [ + Object? error, + StackTrace? stackTrace, + ]) { + final message = filterLogMessage('$messageInput'); Logger(_getCallerSourceCodeFilename()).warning(message, error, stackTrace); } - static void info(Object? message, [Object? error, StackTrace? stackTrace]) { + static void info( + Object? messageInput, [ + Object? error, + StackTrace? stackTrace, + ]) { + final message = filterLogMessage('$messageInput'); Logger(_getCallerSourceCodeFilename()).fine(message, error, stackTrace); } } @@ -77,6 +101,23 @@ Future _writeLogToFile(LogRecord record) async { }); } +Future cleanLogFile() async { + final directory = await getApplicationSupportDirectory(); + final logFile = File('${directory.path}/app.log'); + + if (logFile.existsSync()) { + final lines = await logFile.readAsLines(); + + if (lines.length <= 5000) return; + + final removeCount = lines.length - 5000; + final remaining = lines.sublist(removeCount); + + final sink = logFile.openWrite()..writeAll(remaining, '\n'); + await sink.close(); + } +} + Future deleteLogFile() async { final directory = await getApplicationSupportDirectory(); final logFile = File('${directory.path}/app.log');