O que há com Logging em Java?

votos
113

Porque pode-se usar um dos seguintes pacotes em vez do outro?

  • Logging Java
  • Commons Logging
  • log4j
  • slf4j
  • logback
Publicado 10/12/2008 em 02:27
fonte usuário
Em outras línguas...                            


8 respostas

votos
85

Em ordem cronológica de aparência api (tanto quanto eu sei):

  • Log4j porque quase todo mundo usa-lo (na minha experiência)
  • Commons Logging porque projetos de código aberto usá-lo (para que eles possam integrar com qualquer estrutura de log é usado na solução integrada); especialmente válido se você é um API / Framework / OSS e você confiar em outros pacotes que usam Commons Logging.
  • Commons Logging, porque você não quer "bloquear" a um quadro de log particular (assim, em vez de bloquear para baixo para o Commons Logging dá-lhe, em vez) - Eu não acho que é sensato para decidir utilizar este ponto como a razão.
  • Java registrando porque você não quer adicionar em um frasco extra.
  • Slf4j porque é mais recente do que Commons Logging e fornece log parametrizado:

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • Logback porque é mais recente do que log4j e outra vez, suporta registro de parâmetros, como ele implementa slf4j diretamente
  • Slf4j / Logback porque é escrito pelo mesmo cara que fez log4j, então ele fez melhor (de acordo com Ken G -. Agradecimentos Ele parece se encaixar quando se olha para os seus postos de notícias anteriores )
  • Slf4j porque eles também publicar um adaptador log4j para que você não tem que "mudar a" log4j no código antigo - apenas fazer log4j.properties usar slf4j e é de configuração
Respondeu 10/12/2008 em 02:50
fonte usuário

votos
33

Acho registrando em Java para ser confusa, inconsistente, mal documentada e, especialmente, ao acaso. Além disso, há uma enorme quantidade de semelhança entre estes quadros madeireiras, resultando em duplicação de esforços e confusão quanto ao que o ambiente de registro você está realmente em. Em particular, se você estiver trabalhando em uma pilha sério aplicativo Java web, você está frequentemente em múltiploregistrando ambientes de uma só vez; (Por exemplo, hibernação pode usar log4j, e tomcat java.util.logging). Apache commons é destinado a colmatar diferentes quadros de registro, mas realmente apenas adiciona mais complexidade. Se você não sabe isso antes do tempo, é absolutamente desconcertante. Por que minhas mensagens de log não imprimir para o console, etc.? Ohh porque eu estou olhando para os logs do Tomcat, e não log4j. Acrescentando mais uma camada de complexidade, o servidor de aplicativos podem ter configurações de log globais que podem não reconhecer configurações locais para uma aplicação web particular. Por último, todas estas estruturas madeireiras são muito complicado. Logging em Java tem sido uma bagunça desorganizada deixando desenvolvedores como me frustrado e confuso.

As primeiras versões do Java não tem uma estrutura de log built-in que leva a este cenário.

Respondeu 11/03/2009 em 22:26
fonte usuário

votos
22

Há um ponto importante que não foi mencionado antes:

SLF4J (e ambos Logback e LOG4J como o backend logging) tem suporte para um contexto de diagnóstico mapeada chamada (MDC, consulte javadoc e documentação ).

Este é essencialmente um mapa de segmento local <String, String> que você pode usar para adicionar informações de contexto adicional para o seu evento de log. O estado atual do MDC é anexado a cada evento.

Isso pode ser extremamente útil se você colocar coisas como o nome de usuário ea URL do pedido (no caso de uma aplicação web) para ele. Isso pode ser feito automaticamente usando um filtro, por exemplo.

Respondeu 03/06/2009 em 05:01
fonte usuário

votos
17

Veja também respostas para a pergunta Quais são as melhores práticas para registrar um erro? , Especialmente:

  • Existem alguns possíveis problemas classloading com Commons Logging.

  • Log4J e SLF4J foram desenvolvidos pela mesma pessoa, aprendendo com problemas encontrados na prática, com Log4J.

Respondeu 10/12/2008 em 14:30
fonte usuário

votos
4

As Commons Logging visão geral dá a razão de sua existência: o registo do código da biblioteca, quando você não tem controle sobre a estrutura de log subjacente. Muito importante para os vários projetos Apache, que serão ligadas em aplicações externas. Talvez não tão importante para os projetos internos de TI, onde você tem o controle completo.

Dito isto, eu escrevo para Commons Logging, como fazem muitos dos outros desenvolvedores que conheço. A razão é minimizar bagagem mental: você pode mudar projetos ou empregos, e não tem que aprender um novo quadro (desde que o novo trabalho / projeto também utiliza CL, e / ou você pode convencê-los a mover-se a ele).

Além disso, existe algum valor para criar seus próprios wrappers em torno de qualquer quadro que você usa. Conforme descrito aqui , eu gosto de usar um objeto LogWrapper para fornecer stringification personalizado (importante), e minimizar a poluição visual das declarações de registro (menos importante).

Respondeu 11/12/2008 em 14:48
fonte usuário

votos
4

Em nosso projeto empresa usamos Log4J e é muito fácil de usar como Stephen mostrou em seu exemplo. Nós também ter escrito nossas próprias classes padrão para Log4J para que você pode criar seus próprios esquemas de arquivo de saída. Você pode descrever como seu arquivo de log deve ser parecida. É possível melhorar as aulas log4j originais.

Todas as propriedades log4j você pode mudar em um arquivo log4j.properties, assim você pode usar arquivos diferentes para diferentes projetos.

logging Java não é o meu favorit, mas isso poderia ser porque eu uso log4j desde o início.

Respondeu 10/12/2008 em 08:15
fonte usuário

votos
2

Geralmente eu seria padrão para usar Log4J.

Gostaria de usar Java log se eu não me importava uma dependência em Java 1.4, mas eu ainda iria usar Log4J em preferência.

Gostaria de usar Commons Logging se eu estava melhorando algo que já usei.

Respondeu 10/12/2008 em 05:00
fonte usuário

votos
0

Gostaria de sugerir a criação de uma fachada de registro fino que pode escrever a qualquer dos quadros de registro, altura em que a escolha do motor de apoio tornam-se praticamente um ponto discutível.

Respondeu 10/12/2008 em 05:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more