Carregando...
JavaKotlinProgramação Back-End

Logs em Java/Kotlin com Log4J 1.2

A biblioteca mais usada para fazer logs no Java é o Log4J 1.2, ultima versão de 2012. Há uma nova versão chamada Log4J 2, entretanto muitas bibliotecas ainda usam a versão antiga.

Para incluir o Log4J no seu projeto, aqui vai o endereço dele no Maven Repository.

Você pode configurar o comportamento do Logger de duas maneiras. Também conto os prós e contras de cada um:

  • Arquivo log4j.properties
    É fácil e rápido de configurar. Vale a pena usar quando você sabe exatamente quantos arquivos de logger serão criados já de antemão, antes do software iniciar.
  • Programaticamente, dentro do próprio código.
    Vale a pena usar quando você quer criar loggers e arquivos dinamicamente, criando arquivos diferentes para instâncias diferents de objetos no seu programa, por exemplo.

Exemplo de arquivo log4j.properties (você precisa colocálo dentro de /seu-projeto/src/main/resources/)

# Criando a função appender chamada FILE, que escreverá o log em um arquivo no caminho definido abaixo, com as seguintes configurações:
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=./main.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{ISO8601} T[%t] {%c} (%p)%x - %m%n


# Criando a função appender chamada CONSOLE, que escreverá o log no console da aplicação, com as seguintes configurações:
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} T[%t] {%c} (%p)%x - %m%n


# Configurando o RootLooger, que aplicará essas configurações a todas os logs chamados pelo software.
# O RootLogger enviará mensagens até o nível DEBUG
# E escreverá o log em arquivo e também no console através dos appenders configurados anteriormente chamados FILE e CONSOLE
log4j.rootLogger = DEBUG, FILE, CONSOLE

Exemplo de configuração do logger no Kotlin:

import org.apache.log4j.*

fun main() {
    val rootLogger = Logger.getRootLogger()
    val loggerLayout = PatternLayout("%d{ISO8601} T[%t] C[%c] {%p} %x- %m%n")
    val consoleAppender = ConsoleAppender(loggerLayout)
    val fileAppender = RollingFileAppender(
        loggerLayout,
        "./logs/meu-log.log",
    )
    fileAppender.maximumFileSize = 10485760L // 10Mb
    fileAppender.maxBackupIndex = 4
    rootLogger.addAppender(fileAppender)
    rootLogger.addAppender(consoleAppender)

    val meuLogger = Logger.getLogger("MeuLoggerCustomizado")
    meuLogger.addAppender(fileAppender)
    meuLogger.addAppender(consoleAppender)
}

Controlando Loggers de Bibliotecas externas

Algumas bibliotecas vêm com loggers embutidos (HikariCP, Driver do Apache Cassandra…)

Com o Log4J você consegue redirecionar e controlar as mensagens lançadas por eles. Para isso, você precisa inserir uma biblioteca do tipo “logger binder”. Para o HikariCP e o Cassandra, basta usar a biblioteca slf4j-log4j12. Ao incluí-la no projeto você já consegue controlar o logger destas bibliotecas.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *