Sergey Aldoukhov
04/06/2023, 9:21 PMArjan van Wieringen
04/07/2023, 6:06 AMSergey Aldoukhov
04/10/2023, 1:06 AMdata class LoggerConfig(
var syslogHost: String = "127.0.0.1",
var syslogPort: Int = 514,
var syslogProtocol: String = "udp",
var rootLevel: String = "info",
var consoleLevel: String = "info",
var syslogLevel: String? = null,
var consolePattern: String = "%d{HH:mm:ss.SSS} %-5level %logger{36} %F(%L) - %msg%n")
fun configureLogger() {
val loggerConfig = LoggerConfig()
val builder = ConfigurationBuilderFactory.newConfigurationBuilder()
val syslog = builder
.newAppender("app_syslog", "Syslog")
.addAttribute("host", loggerConfig.syslogHost)
.addAttribute("port", loggerConfig.syslogPort)
.addAttribute("protocol", loggerConfig.syslogProtocol)
.add(
builder.newLayout("RFC5424Layout")
.addAttribute("appName", "my_app")
.addAttribute("mdcId", "mdc")
.addAttribute("facility", "LOCAL0")
.addAttribute("exceptionPattern", "%throwable{full}")
.addAttribute("newLine", true)
)
if (loggerConfig.syslogLevel != null) {
syslog.add(builder
.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.DENY)
.addAttribute("level", loggerConfig.syslogLevel))
}
val console = builder
.newAppender("app_console", "Console")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT)
.add(
builder
.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.DENY)
.addAttribute("level", loggerConfig.consoleLevel)
)
.add(
builder
.newLayout("PatternLayout")
.addAttribute("pattern", loggerConfig.consolePattern)
)
val config = builder
.add(console)
.add(syslog)
.add(
builder
.newRootLogger(loggerConfig.rootLevel)
.add(builder.newAppenderRef("app_syslog"))
.add(builder.newAppenderRef("app_console"))
)
.build()
(LogManager.getContext(false) as LoggerContext).configuration = config
logger.warn("LOGGER INITIALIZED - $loggerConfig")
}
Arjan van Wieringen
04/10/2023, 7:42 AMSergey Aldoukhov
04/10/2023, 5:01 PMval loggerConfig = LoggerConfig()
Is just for an illustration, in real app youāll get the config object from somewhere else.Sergey Aldoukhov
04/10/2023, 5:04 PM(LogManager.getContext(false) as LoggerContext).configuration = config
Initializes or re-initializes the logging system. If you just love the xml, it is your problem, but in the real life the configuration parameters can be get from anywhere (f.e. database etc.)Arjan van Wieringen
04/10/2023, 6:09 PMSergey Aldoukhov
04/10/2023, 7:09 PM