Создаём логгер Logback через конструктор без конфигов.
Следующий класс показывает создание логгера. В конструкторе создается объект LoggerContext, объект PatternLayoutEncoder, в котором задаётся кодировка и паттерн сообщения. Создаётся логгер и присваивается в поле log. Задаётся уровень логирования и отключается аддитивность. К логгеру добавляется консольный и файловый "аппендеры".
В конструктор класса нужно передать название логгера и путь к файлу лога.
package your.package
import ch.qos.logback.classic.Level
import ch.qos.logback.classic.Logger
import ch.qos.logback.classic.LoggerContext
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.FileAppender
import org.slf4j.LoggerFactory
import java.nio.charset.StandardCharsets
class LogbackLogger(loggerName: String, logFilePath: String) {
@JvmField
var log: Logger
init {
val loggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
// set charset and pattern
val layoutEncoder = PatternLayoutEncoder().apply {
charset = StandardCharsets.UTF_8
pattern = "%d %-5p %m%n%n"
context = loggerContext
}.also { it.start() }
// set logger level
log = (LoggerFactory.getLogger(loggerName) as Logger).apply {
level = Level.INFO
isAdditive = false
}
// add console appender
log.addAppender(ConsoleAppender().apply {
name = "console_appender_$loggerName"
context = loggerContext
encoder = layoutEncoder
}.also { it.start() })
// add file appender
log.addAppender(FileAppender().apply {
name = "file_appender_$loggerName"
context = loggerContext
encoder = layoutEncoder
file = logFilePath
}.also { it.start() })
}
}
Использование на языке Kotlin:
val logger = LogbackLogger("logger name", "C:\...\***.log").log
logger.info("info message")
logger.takeIf { it.isDebugEnabled }?.debug("debug message")
// ...
logger.detachAndStopAllAppenders()
Java:
var logger = new LogbackLogger("logger name", "C:\...\***.log").log;
logger.info("info message");
if (logger.isDebugEnabled()) {
logger.debug("debug message");
}
// ...
logger.detachAndStopAllAppenders();
Для создания логгера использована библиотека ch.qos.logback.logback-classic:1.2.7