mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 23:02:04 +01:00
Programmatically initialize logger, with a new file logger
This commit is contained in:
76
src/main/kotlin/ca/gosyer/core/logging/LoggingSetup.kt
Normal file
76
src/main/kotlin/ca/gosyer/core/logging/LoggingSetup.kt
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ca.gosyer.core.logging
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.Level
|
||||||
|
import org.apache.logging.log4j.LogManager
|
||||||
|
import org.apache.logging.log4j.core.LoggerContext
|
||||||
|
import org.apache.logging.log4j.core.appender.ConsoleAppender
|
||||||
|
import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder
|
||||||
|
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
const val consolePattern =
|
||||||
|
"%highlight{%d{" + '$' + "{LOG_DATEFORMAT_PATTERN:-HH:mm:ss.SSS}} [%t] " + '$' + "{LOG_LEVEL_PATTERN:-%p}/%c{1}: %m%n" + '$' + "{LOG_EXCEPTION_CONVERSION_WORD:-%xEx}}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=black, TRACE=black}"
|
||||||
|
const val filePattern =
|
||||||
|
"%d{" + '$' + "{LOG_DATEFORMAT_PATTERN:-HH:mm:ss.SSS}} [%t] " + '$' + "{LOG_LEVEL_PATTERN:-%p}/%c{1}: %m%n" + '$' + "{LOG_EXCEPTION_CONVERSION_WORD:-%xEx}"
|
||||||
|
|
||||||
|
@Suppress("UPPER_BOUND_VIOLATED_WARNING")
|
||||||
|
fun initializeLogger(loggingLocation: File) {
|
||||||
|
val ctx = LogManager.getContext(false) as LoggerContext
|
||||||
|
val builder = ConfigurationBuilderFactory.newConfigurationBuilder()
|
||||||
|
.apply {
|
||||||
|
setStatusLevel(Level.WARN)
|
||||||
|
setConfigurationName("LoggerBuilder")
|
||||||
|
add(
|
||||||
|
newAppender("Console", "Console")
|
||||||
|
.addAttribute(
|
||||||
|
"target",
|
||||||
|
ConsoleAppender.Target.SYSTEM_OUT
|
||||||
|
)
|
||||||
|
.add(
|
||||||
|
newLayout("PatternLayout")
|
||||||
|
.addAttribute("disableAnsi", "false")
|
||||||
|
.addAttribute("pattern", consolePattern)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
add(
|
||||||
|
newAppender("Rolling", "RollingFile")
|
||||||
|
.addAttribute(
|
||||||
|
"fileName",
|
||||||
|
loggingLocation.absolutePath.trimEnd { it == '/' || it == '\\' } + "/rolling.log"
|
||||||
|
)
|
||||||
|
.addAttribute(
|
||||||
|
"filePattern",
|
||||||
|
loggingLocation.absolutePath.trimEnd { it == '/' || it == '\\' } + "/archive/rolling-%d{MM-dd-yy}.log.gz"
|
||||||
|
)
|
||||||
|
.add(
|
||||||
|
newLayout("PatternLayout")
|
||||||
|
.addAttribute("pattern", filePattern)
|
||||||
|
)
|
||||||
|
.addComponent(
|
||||||
|
newComponent<ComponentBuilder<*>>("Policies")
|
||||||
|
.addComponent(
|
||||||
|
newComponent<ComponentBuilder<*>>("CronTriggeringPolicy")
|
||||||
|
.addAttribute("schedule", "0 0 0 * * ?")
|
||||||
|
.addAttribute("evaluateOnStartup", "true")
|
||||||
|
)
|
||||||
|
.addComponent(
|
||||||
|
newComponent<ComponentBuilder<*>>("SizeBasedTriggeringPolicy")
|
||||||
|
.addAttribute("size", "100M")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
add(
|
||||||
|
newRootLogger(Level.DEBUG)
|
||||||
|
.add(newAppenderRef("Console"))
|
||||||
|
.add(newAppenderRef("Rolling"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
ctx.configuration = builder.build()
|
||||||
|
ctx.updateLoggers()
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import androidx.compose.runtime.getValue
|
|||||||
import androidx.compose.ui.input.key.Key
|
import androidx.compose.ui.input.key.Key
|
||||||
import androidx.compose.ui.unit.IntOffset
|
import androidx.compose.ui.unit.IntOffset
|
||||||
import ca.gosyer.BuildConfig
|
import ca.gosyer.BuildConfig
|
||||||
|
import ca.gosyer.core.logging.initializeLogger
|
||||||
import ca.gosyer.data.DataModule
|
import ca.gosyer.data.DataModule
|
||||||
import ca.gosyer.data.server.ServerService
|
import ca.gosyer.data.server.ServerService
|
||||||
import ca.gosyer.data.server.ServerService.ServerResult
|
import ca.gosyer.data.server.ServerService.ServerResult
|
||||||
@@ -27,6 +28,7 @@ import ca.gosyer.ui.base.theme.AppTheme
|
|||||||
import ca.gosyer.util.lang.launchUI
|
import ca.gosyer.util.lang.launchUI
|
||||||
import ca.gosyer.util.lang.withUIContext
|
import ca.gosyer.util.lang.withUIContext
|
||||||
import ca.gosyer.util.system.getAsFlow
|
import ca.gosyer.util.system.getAsFlow
|
||||||
|
import ca.gosyer.util.system.userDataDir
|
||||||
import com.github.weisj.darklaf.LafManager
|
import com.github.weisj.darklaf.LafManager
|
||||||
import com.github.weisj.darklaf.theme.DarculaTheme
|
import com.github.weisj.darklaf.theme.DarculaTheme
|
||||||
import com.github.weisj.darklaf.theme.IntelliJTheme
|
import com.github.weisj.darklaf.theme.IntelliJTheme
|
||||||
@@ -36,20 +38,15 @@ import com.github.zsoltk.compose.savedinstancestate.Bundle
|
|||||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import org.apache.logging.log4j.core.config.Configurator
|
|
||||||
import toothpick.configuration.Configuration
|
import toothpick.configuration.Configuration
|
||||||
import toothpick.ktp.KTP
|
import toothpick.ktp.KTP
|
||||||
import toothpick.ktp.extension.getInstance
|
import toothpick.ktp.extension.getInstance
|
||||||
|
import java.io.File
|
||||||
import java.util.logging.Level
|
import java.util.logging.Level
|
||||||
|
|
||||||
@OptIn(DelicateCoroutinesApi::class)
|
@OptIn(DelicateCoroutinesApi::class)
|
||||||
fun main() {
|
fun main() {
|
||||||
val clazz = MainViewModel::class.java
|
initializeLogger(File(userDataDir, "logging"))
|
||||||
Configurator.initialize(
|
|
||||||
null,
|
|
||||||
clazz.classLoader,
|
|
||||||
clazz.getResource("log4j2.xml")?.toURI()
|
|
||||||
)
|
|
||||||
|
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
System.setProperty("kotlinx.coroutines.debug", "on")
|
System.setProperty("kotlinx.coroutines.debug", "on")
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Configuration
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns="http://logging.apache.org/log4j/2.0/config"
|
|
||||||
xsi:noNamespaceSchemaLocation="Log4j-config.xsd">
|
|
||||||
<Appenders>
|
|
||||||
<Console name="Console" target="SYSTEM_OUT">
|
|
||||||
<PatternLayout disableAnsi="false" pattern="%highlight{%d{${LOG_DATEFORMAT_PATTERN:-HH:mm:ss.SSS}} [%t] ${LOG_LEVEL_PATTERN:-%p}/%c{1}: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%xEx}}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=black, TRACE=black}" />
|
|
||||||
</Console>
|
|
||||||
</Appenders>
|
|
||||||
|
|
||||||
<Loggers>
|
|
||||||
<Root level="debug">
|
|
||||||
<AppenderRef ref="Console"/>
|
|
||||||
</Root>
|
|
||||||
</Loggers>
|
|
||||||
|
|
||||||
</Configuration>
|
|
||||||
Reference in New Issue
Block a user