Log em Java vs Log4J [fechado]


134

Ainda vale a pena adicionar a biblioteca log4j a um projeto Java 5 apenas para registrar, digamos, algumas exceções a um arquivo com algumas boas configurações de sobreposição. Ou o utilitário util.logging padrão também fará o trabalho?

O que você acha?


Consulte stackoverflow.com/a/13144054/603516 para obter vários problemas de bloqueio do log4j 1.2 a serem considerados.
Vadzim

Respostas:


115

Eu diria que você provavelmente está bem com util.logging para as necessidades que você descreve.

Para uma boa árvore de decisão, dê uma olhada no Log4j vs java.util.logging

Pergunta 1: Você antecipa a necessidade de algum dos manipuladores inteligentes que o Log4j possui e que o JUL não possui, como o SMTPHandler, o NTEventLogHandler ou qualquer um dos FileHandlers muito convenientes?

Pergunta dois: Você se vê desejando mudar frequentemente o formato da sua saída de log? Você precisará de uma maneira fácil e flexível de fazer isso? Em outras palavras, você precisa do PatternLayout do Log4j?

Pergunta três: Você prevê uma necessidade definitiva da capacidade de alterar configurações complexas de log em seus aplicativos, depois que eles são compilados e implantados em um ambiente de produção? Sua configuração parece algo como "Mensagens graves desta classe são enviadas por e-mail para o suporte; mensagens graves de um subconjunto de classes são registradas em um syslog deamon em nosso servidor; mensagens de aviso de outro subconjunto de classes são registradas para um arquivo na unidade de rede A; e todas as mensagens de todos os lugares são registradas em um arquivo na unidade de rede B "? E você se vê aprimorando a cada dois dias?

Se você puder responder sim a qualquer uma das perguntas acima, acesse Log4j. Se você responder um não definitivo a todos eles, o JUL será mais do que adequado e já está convenientemente incluído no SDK.

Dito isto, praticamente todos os projetos hoje em dia acabam incluindo o log4j, mesmo que apenas por alguma outra biblioteca o utilize.


1
Ótima resposta baseada em questionário. Para cada um o seu com base nas necessidades.
HopeKing 10/03/2017

43

Eu recomendo que você use o Simple Logging Facade for Java (SLF4J). Ele suporta diferentes provedores que incluem o Log4J e pode ser usado como um substituto para o Apache Commons Logging.


6
O que há de errado com o Commons Logging?
Bart van Heukelom

5
@Bart van Heukelom e comentários positivos - leia articles.qos.ch/thinkAgain.html
Stephen C

4
@ Stephen C: Obrigado pela informação, embora eu tenha aprendido isso há algum tempo e agora estou usando o SLF4J sempre que posso. (Meu comentário foi uma verdadeira questão btw, não uma observação conservadora)
Bart van Heukelom

1
@ Bart, Commons Logging usa descoberta dinâmica do pacote a ser usado. O SLF4J usa (ou costumava) precisar das classes no back-end para carregar.
Thorbjørn Ravn Andersen

21

O Log4j existe há muito tempo e funciona muito bem. Não tenho estudos científicos para apoiá-lo, mas com base no que vi em um grande número de clientes, é facilmente a estrutura de log que vejo usada mais do que qualquer outra. Ele existe há muito tempo e não foi substituído pelo Next Big Logging Framework, que diz algo.

É simples de configurar e fácil de aprender os anexos básicos (saídas). Existem anexos de host completos disponíveis, incluindo:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

Mais outros. Também não é difícil escrever seu próprio aplicativo. Além disso, há uma grande flexibilidade em cada um dos anexos que permite controlar especificamente o que é produzido no seu log.

Uma observação: tive uma série de problemas no carregador de classes quando usei o log do apache commons, além do log4j. Era apenas para um aplicativo específico, mas achei mais simples usar o log4j sozinho, em vez de ter a flexibilidade oferecida ao usar uma camada de abstração como o log comum.

Veja este artigo para mais detalhes :

Boa sorte!


17

O java.util.logging oferece um pacote abrangente de registros sem o excesso de bagagem que alguns outros fornecem.


5
Além disso, ele é incluído por padrão e usado por si só Java (assim você vai tê-lo de qualquer maneira!)
parou - anony-Mousse


4

Eu recomendo usar o Apache Commmons Logging como sua interface de log. Dessa forma, você tem a flexibilidade de alternar as implementações de registro a qualquer momento, sem exigir nenhuma alteração no código.


3

Eu iria com log4j. As possibilidades do log4j não são obsoletas!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.