fix(app): synchronized logs

This commit is contained in:
rhunk
2024-08-12 01:14:21 +02:00
parent 0aa429c29b
commit ae1aee3ce0

View File

@@ -2,8 +2,6 @@ package me.rhunk.snapenhance
import android.util.Log import android.util.Log
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import me.rhunk.snapenhance.common.data.FileType import me.rhunk.snapenhance.common.data.FileType
import me.rhunk.snapenhance.common.logger.AbstractLogger import me.rhunk.snapenhance.common.logger.AbstractLogger
import me.rhunk.snapenhance.common.logger.LogChannel import me.rhunk.snapenhance.common.logger.LogChannel
@@ -120,6 +118,7 @@ class LogManager(
private val LOG_LIFETIME = 24.hours private val LOG_LIFETIME = 24.hours
} }
private val printLogLock = Any()
private val anonymizeLogs by lazy { !remoteSideContext.config.root.scripting.disableLogAnonymization.get() } private val anonymizeLogs by lazy { !remoteSideContext.config.root.scripting.disableLogAnonymization.get() }
var lineAddListener = { _: LogLine -> } var lineAddListener = { _: LogLine -> }
@@ -146,28 +145,28 @@ class LogManager(
} }
fun internalLog(tag: String, logLevel: LogLevel, message: Any?) { fun internalLog(tag: String, logLevel: LogLevel, message: Any?) {
runCatching { synchronized(printLogLock) {
val anonymizedMessage = message.toString().let { runCatching {
if (remoteSideContext.config.isInitialized() && anonymizeLogs) val anonymizedMessage = message.toString().let {
it.replace(uuidRegex, "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") if (remoteSideContext.config.isInitialized() && anonymizeLogs)
.replace(contentUriRegex, "content://xxx") it.replace(uuidRegex, "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
.replace(filePathRegex, "xxxxxxxx.$2") .replace(contentUriRegex, "content://xxx")
else it .replace(filePathRegex, "xxxxxxxx.$2")
} else it
val line = LogLine( }
logLevel = logLevel, val line = LogLine(
dateTime = getCurrentDateTime(), logLevel = logLevel,
tag = tag, dateTime = getCurrentDateTime(),
message = anonymizedMessage tag = tag,
) message = anonymizedMessage
remoteSideContext.coroutineScope.launch(Dispatchers.IO) { )
logFile?.appendText("|$line\n", Charsets.UTF_8) logFile?.appendText("|$line\n", Charsets.UTF_8)
lineAddListener(line)
Log.println(logLevel.priority, tag, anonymizedMessage)
}.onFailure {
Log.println(Log.ERROR, tag, "Failed to log message: $message")
Log.println(Log.ERROR, tag, it.stackTraceToString())
} }
lineAddListener(line)
Log.println(logLevel.priority, tag, anonymizedMessage)
}.onFailure {
Log.println(Log.ERROR, tag, "Failed to log message: $message")
Log.println(Log.ERROR, tag, it.stackTraceToString())
} }
} }