Логгер Logback через конструктор

Создаём логгер 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

16.11.2021 ← на главную Теги: logger, logback, kotlin, java