diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/Logging.kt b/src/main/kotlin/com/jetpackduba/gitnuro/Logging.kt new file mode 100644 index 0000000..cd649d8 --- /dev/null +++ b/src/main/kotlin/com/jetpackduba/gitnuro/Logging.kt @@ -0,0 +1,69 @@ +package com.jetpackduba.gitnuro + +import com.jetpackduba.gitnuro.extensions.openDirectory +import com.jetpackduba.gitnuro.system.OS +import com.jetpackduba.gitnuro.system.getCurrentOs +import org.apache.log4j.ConsoleAppender +import org.apache.log4j.LogManager +import org.apache.log4j.PatternLayout +import org.apache.log4j.RollingFileAppender +import java.io.File + +fun initLogging() { + val layout = PatternLayout("%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n") + + val filePath = when (getCurrentOs()) { + OS.LINUX -> linuxLogsPathAppender() + OS.WINDOWS -> windowsLogsPathAppender() + OS.MAC -> macosLogsPath() + OS.UNKNOWN -> defaultLogsPath() + } + + val fileAppender = RollingFileAppender(layout, filePath, true) + fileAppender.maximumFileSize = 10 * 1024 * 1024 // 10MB + fileAppender.maxBackupIndex = 5 + + val consoleAppender = ConsoleAppender(layout) + + LogManager.getRootLogger().apply { + addAppender(fileAppender) + addAppender(consoleAppender) + } +} + +private fun defaultLogsPath(): String { + val homePath = System.getProperty("user.home").orEmpty() + + return "$homePath/gitnuro/gitnuro.logs" +} + +private fun macosLogsPath(): String { + val logsDir = File(System.getProperty("user.home") + "/Library/Logs/") + .openDirectory("com.jetpackduba.Gitnuro") + + return "${logsDir.absolutePath}/gitnuro.log" +} + +private fun windowsLogsPathAppender(): String { + val localAppData = System.getenv("LOCALAPPDATA") + + val gitnuroDir = File(localAppData).openDirectory("Gitnuro") + val logsDir = gitnuroDir.openDirectory("logs") + return "${logsDir.absolutePath}/gitnuro.log" +} + +private fun linuxLogsPathAppender(): String { + // Based on this https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + val homePath = System.getProperty("user.home") + val xdgStateHome = System.getenv("XDG_STATE_HOME") + + val safeXdgStateHome = if (xdgStateHome.isNullOrBlank()) + "$homePath/.local/state" + else + xdgStateHome + + val gitnuroDir = File(safeXdgStateHome).openDirectory("gitnuro") + val logsDir = gitnuroDir.openDirectory("logs") + + return "$logsDir/gitnuro.log" +} diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/main.kt b/src/main/kotlin/com/jetpackduba/gitnuro/main.kt index e68124e..fd60e82 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/main.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/main.kt @@ -1,6 +1,13 @@ package com.jetpackduba.gitnuro +import com.jetpackduba.gitnuro.preferences.initPreferencesPath + +private const val TAG = "main" + fun main(args: Array) { + initLogging() + initPreferencesPath() + val app = App() app.start(args) -} \ No newline at end of file +} diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/preferences/AppSettings.kt b/src/main/kotlin/com/jetpackduba/gitnuro/preferences/AppSettings.kt index 6d398e4..cf5fd01 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/preferences/AppSettings.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/preferences/AppSettings.kt @@ -1,6 +1,8 @@ package com.jetpackduba.gitnuro.preferences import com.jetpackduba.gitnuro.extensions.defaultWindowPlacement +import com.jetpackduba.gitnuro.system.OS +import com.jetpackduba.gitnuro.system.getCurrentOs import com.jetpackduba.gitnuro.theme.ColorsScheme import com.jetpackduba.gitnuro.theme.Theme import com.jetpackduba.gitnuro.viewmodels.TextDiffType @@ -195,4 +197,20 @@ class AppSettings @Inject constructor() { _customThemeFlow.value = Json.decodeFromString(themeJson) } } +} + +// TODO migrate old prefs path to new one? +fun initPreferencesPath() { + if(getCurrentOs() == OS.LINUX) { + val xdgConfigHome: String? = System.getenv("XDG_CONFIG_HOME") + + val settingsPath = if(xdgConfigHome.isNullOrBlank()) { + val home = System.getProperty("user.home").orEmpty() + "$home/.config/gitnuro" + } else { + "$xdgConfigHome/gitnuro" + } + + System.setProperty("java.util.prefs.userRoot", settingsPath) + } } \ No newline at end of file diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties deleted file mode 100644 index 0c28a82..0000000 --- a/src/main/resources/log4j.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Root logger option -log4j.rootLogger=INFO, file, stdout -# Direct log messages to a log file -log4j.appender.file=org.apache.log4j.RollingFileAppender -log4j.appender.file.File=${user.home}/.gitnuro/gitnuro.log -log4j.appender.file.MaxFileSize=10MB -log4j.appender.file.MaxBackupIndex=10 -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n -# Direct log messages to stdout -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Target=System.out -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file