log4net vs. Nlog


355

Alguém tem experiência para ambos? Como eles se comparam?

Estamos planejando usar um deles para efetuar logon em um aplicativo corporativo.

Referências:

log4net

nlog

EDIT: Não temos dependências existentes para nlog ou log4net.


9
Este é o logger que eu uso: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", mensagem));
Zumalifeguard 31/08/10

213
Bom para você, mas algumas pessoas podem precisar a capacidade de transformar o registo on / off dinamicamente, para usar diferentes níveis de log, para apagar automaticamente os dados de log antigos, etc.
Tor Hovland

23
Note-se que a documentação do Log4Net é terrível.
BentOnCoding

Existe uma publicação detalhada no blog robertmccarter.com/switching-to-nlog #
Michael Freidgeim

2
Você deve experimentar o ReflectInsight. Muito mais poderoso do que ambos os insightextensions.codeplex.com
code5

Respostas:


383

Recentemente, fui encarregado de "criar um protótipo de um loggin" para um próximo projeto. Eu não tive nenhuma experiência na estrutura de log. Eu pesquisei, passei por tutoriais, fiz aplicativos de brinquedos etc. no Log4Net, NLog e Enterprise Library por alguns dias. Voltei 3-4 semanas depois e reuni-los em uma demonstração coesa. Espero que isso seja útil para você.

Minha recomendação para o nosso projeto é esta:

  1. Usar uma fachada log (por exemplo Common.Logging , SimpleLoggingFacade ) para evitar a dependência directa.
  2. Se acabarmos usando a Biblioteca Corporativa para outras instalações, use-a também para Log.
  3. Se acabarmos usando algo dependente do Log4Net, use o Log4Net.
  4. Se nenhuma das opções acima, use NLog. Qual eu preferiria.

Isso é baseado nessas descobertas (opiniões!):

  • Todas as três estruturas são capazes e podem fazer algumas coisas sofisticadas. Queremos uma solução de qualidade, mas, francamente, não precisamos de um desempenho ultra-alto ou de 60 tipos de coletores de eventos.
  • Todos os três têm conceitos básicos muito semelhantes.
  • Cada um possui seus próprios truques, como roteamento realmente avançado ou nomes de arquivos de log dinâmicos, truncamento de arquivos etc.
  • Todos os três estão muito bem documentados à sua maneira.
  • Para um jornal completo como eu, eles eram todos um pouco estranhos inicialmente. Não há diferenças drásticas aqui para o básico. Eu superei isso.
  • Ao revisitar as coisas algumas semanas depois, o NLog estava claramente o mais fácil de retomar. Eu precisava de muito pouco aperfeiçoamento. Com o Log4Net, tive que revisitar alguns exemplos online para começar. Com o EntLib, desisti e fiz os tutoriais novamente do zero - estava totalmente perdido.
  • Não consegui descobrir como fazer com que o EntLib fizesse algumas coisas, como fazer logon no banco de dados. Pode ser fácil, mas estava além do meu limite de tempo.
  • Log4Net e NLog têm uma pequena pegada no código. EntLib é spam, mas eu usaria uma fachada sobre ele de qualquer maneira.
  • Eu acidentalmente configurei incorretamente o EntLib e ele me disse em tempo de execução. Log4Net não. Não tive uma configuração incorreta acidental com o NLog.
  • O EntLib vem com um editor app.config de boa aparência, que você 100% precisa. NLog possui um esquema de arquivo de configuração para que você obtenha "intellisense". Log4Net vem com nada.

Então, obviamente, eu gosto do NLog até agora. Porém, não é suficiente usá-lo, apesar de ter outra solução disponível.


19
+1 em recomendar a construção de uma fachada para a verdadeira separação de preocupações (SoC), ou você não polui seu domínio.
precisa saber é o seguinte

66
A fachada só funciona se você puder fazê-lo sem quebrar os valores de diagnóstico que dependem da pilha de chamadas, etc. Eu já vi muitas fachadas que quebram esses recursos essenciais de diagnóstico que acabaram fazendo mais mal que bem ...
James Schek

11
O Log4Net ainda não suporta os perfis de cliente do .NET 3.5 SP1 e .NET 4, porque faz referência ao System.Web. Só queria salientar isso, embora na verdade esteja intimamente relacionado a 'com uma dependência do Log4Net, use o Log4Net'.
Simon D.

59
O NLog é suportado ativamente ( nlog-project.org/download ) enquanto o Log4Net não foi atualizado desde a publicação da versão 1.2.10, publicada em 19 de abril de 2006 ( edições.apache.org / jira / browse / LOG4NET / fixforversion / 11128 )
Jay Cincotta

5
Se você tem uma dependência de uma biblioteca usando o log4net e deseja usar o NLog (ou vice-versa), é bastante simples escrever e configurar uma classe personalizada do Appender para fazer a ponte entre as duas.
dbkk

158

Uma consideração importante que não foi muito discutida é o suporte e as atualizações.

O Log4Net não foi atualizado desde que a versão 1.2.10 foi publicada em 19 de abril de 2006 .

Por outro lado, o NLog tem suporte ativo desde 2006, em breve lançará o NLog 2.0, suportando muitas plataformas que não existiam quando o log4net foi atualizado pela última vez , como:

  • NET Framework 2.0 SP1 e superior, 3.5 e 4.0 (perfis cliente e estendido)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Perfil mono 2.x

30
Mas ele precisa ser atualizado? Se não estiver quebrado, não conserte?
glenneroo

24
Ele está quebrado: resolução * mexe-se o endereço IP entre IPv4 / IPv6 de localhost no Vista e Win7 (vários patches não-oficiais estão flutuando) * Não compilar em .Net 4.0 Client Profile
Tormod Hystad

6
Parece haver uma versão do .NET 4.0 em andamento para o Log4Net.
#

38
O log4net lançou a v1.2.11 em outubro de 2011 . Eu acho que essa resposta está obsoleta agora.
Mariano Desanze 25/10

83
Na verdade, essa resposta ainda era valiosa para mim. Estou no processo de escolher um criador de logs, e essa resposta nos diz que o log4net foi atualizado uma vez na última meia década, enquanto o NLog é um projeto mais ativo.
Batibix 8/11/11

97

Tendo tido uma experiência com os dois frameworks recentemente, pensei em compartilhar meus pontos de vista sobre cada um deles.

Foi-me pedido que avaliasse as estruturas de registro para um aplicativo Web existente; reduzi minhas opções para NLog (v2.0) e log4net (v1.2.11) depois de passar por vários fóruns online. Aqui estão minhas descobertas:

  1. A configuração / inicialização do NLog é fácil. Você segue o tutorial de Introdução no site deles e está pronto. Você tem uma idéia justa de como as coisas podem estar com o nlog. O arquivo de configuração é tão intuitivo que qualquer um pode entender a configuração. Por exemplo: se você deseja ativar o logon interno, defina o sinalizador no nó de cabeçalho do arquivo de configuração do Nlog, que é onde você esperaria. No log4net, você define diferentes sinalizadores na seção appSettings do web.config.

  2. No log4net, o registro interno não gera timestamp, o que é irritante. No Nlog, você obtém um bom log com registros de data e hora. Achei muito útil nas minhas avaliações.

  3. Filtros no log4net - É melhor verificar minha pergunta - filtro log4net - como escrever E filtrar para ignorar as mensagens de log e, se você encontrar uma resposta / solução para isso, informe-me. Entendo que existe uma solução alternativa para essa pergunta, pois você pode escrever seu próprio filtro personalizado. Mas algo que não está facilmente disponível no log4net.

  4. Desempenho - registrei cerca de 3000 mensagens de log no banco de dados usando um procedimento armazenado. Eu usei simple for loop (int i = 0; i <3000; i ++ ... para registrar a mesma mensagem 3000 vezes. Para as gravações: log4net O AdoAppender levou quase o dobro do tempo que o NLog.

  5. Log4net não suporta appender assíncrono.

Foi uma comparação suficiente para eu escolher o NLog como a estrutura de log. :)


do log4net logs internos de depuração: logging.apache.org/log4net/release/sdk/...
Narayan Akhade

36

Para quem chegar atrasado a esse segmento, consulte a .Net Base Class Library (BCL). Muitas pessoas perderam as alterações entre .Net 1.1 e .Net 2.0 quando o TraceSource classe foi introduzida (por volta de 2005).

O uso do TraceSource é análogo a outras estruturas de log, com controle granular de log, configuração em app.config / web.config e acesso programático - sem a sobrecarga do bloco de aplicativos corporativos.

Também existem várias comparações: "log4net vs TraceSource"


11
EntLib está estendendo TraceSource
Michael Freidgeim

34

Para nós, a principal diferença está no desempenho geral ...

Dê uma olhada no Logger.IsDebugEnabledNLog versus Log4Net, a partir de nossos testes, o NLog tem menos sobrecarga e é isso que estamos buscando (coisas de baixa latência).

Felicidades, Florian


25

Primeiro, observe o restante da sua pilha.

Se você estiver usando o NHibernate, ele utilizará o Log4Net diretamente. Outras estruturas podem ter outros registradores específicos de que precisam.

Fora isso: ambos funcionam bem.

Eu mesmo decidi pela Log4Net. Pode ser difícil de configurar e, se não estiver configurado corretamente, é difícil descobrir o que deu errado. Mas você pode fazê-lo fazer quase tudo o que você deseja de um criador de logs.

Se você não tem um problema permanente com a Log4Net, aqui está um artigo que escrevi sobre como começar: http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@greg: Observe que, no NHibernate v3, a dependência do log4net é removida, felizmente - é conectável para que você possa usar o NLog, se desejar.
UpTheCreek 16/05

NLog é uma dor igual para configurar / descobrir o que está errado também. Pelo menos com o log4net, você pode encontrar documentação e / ou google para problemas.
Mrchief

Bom ponto de levar o resto da sua pilha em consideração, não posso dizer que é uma preocupação que eu consideraria de cabeça para baixo. Embora o NHibernate pareça não ser mais um exemplo para esse cenário, o Sitecore fornece um exemplo contemporâneo disso, pois usa o Log4Net internamente. Sitecore é bastante extensível, de modo que você pode usar o que você preferir para iniciar sessão, mas que é muito mais complexa do que a edição web.config do site para adicionar seus próprios loggers
Scott Simontis


14

Eu ecoo o acima e prefiro nLog. Entlib é desnecessariamente inchado.

Re: Log4net Uma coisa que SEMPRE me deixa com log4net é esquecer de adicionar o seguinte ao global.asax para iniciar o componente:

log4net.Config.XmlConfigurator.Configure();

13

Se você for aqui, poderá encontrar uma matriz abrangente que inclui as bibliotecas NLog e Log4Net, além da Enterprise Lib e outros produtos.

Alguém poderia argumentar que a matriz é feita de forma a sublinhar os recursos da única lib comercial presente na matriz. Eu acho que é verdade, mas de qualquer maneira foi útil conduzir minha escolha contra o NLog.

Saudações


11
Olhando para essa matriz, parece consideravelmente desatualizado em relação a pelo menos a estrutura de The Object Guy, que é um concorrente comercial.
Andy Dent

9

Como notei, o log4net bloqueia seus arquivos de saída enquanto o aplicativo está em execução, portanto você não pode excluí-los. Caso contrário, eles são semelhantes.

Então, eu prefiro o NLog.


22
Adicione <lockingModel type = "log4net.Appender.FileAppender + MinimalLock" /> à sua configuração do fileappender para evitar isso (mencionado na página de exemplos do log4net aqui: logging.apache.org/log4net/release/config-examples.html )
EventHorizon

9

Plug vergonhoso para um projeto de código aberto que eu corro, mas, dada a animada discussão sobre qual estrutura de log do .NET é mais ativa, pensei em publicar um link obrigatório no Serilog .

Para usar em um aplicativo, o Serilog é semelhante ao (e se baseia fortemente) no log4net. Diferente de outras opções de log do .NET, no entanto, o Serilog trata de preservar a estrutura dos eventos de log para análise offline. Quando você escreve:

Log.Information("The answer is {Answer}", 42);

A maioria das bibliotecas de log imediatamente processa a mensagem em uma sequência. O Serilog também pode fazer isso, mas preserva a { Answer: 42 }propriedade para que mais tarde, usando um de vários repositórios de dados NoSQL, você possa consultar adequadamente os eventos com base no valor de Answer.

Estamos perto do 1.0 e suportamos todas as plataformas modernas (.NET 4.5, Windows Store e Windows Phone 8).


Mas a pergunta é: suporta Mono? ;) Parece promissor (e eu amo o logotipo da linha e da agulha), mas não consegui encontrar nenhuma informação sobre se ele suporta o Mono ou não.
Ashokgelal 6/03

Boa pergunta :) ... sim, temos usuários no Mono - não tenho certeza se eles estão usando a compilação .NET 4.5 ou 4.0 do Serilog, mas se você encontrar algum problema, ajudaremos.
Nicholas Blumhardt

.NET apoio 4,5 me pegou, fazer o download e experimentar a sua solução agora
Fat Shogun

8

Eu também uso o NLog porque ele também funciona com código não gerenciado. Suponho que possa ser possível usar log4net e log4cxx juntos, mas o NLog lida com códigos gerenciados e não gerenciados imediatamente.

Também observei o Common.Logging , uma fachada que faz abstração da API de log, que suporta log4net, NLog e Entreprise Library. Acho que não vou usá-lo, mas gosto de como eles usam lambdas para melhorar o desempenho quando o log está desativado (um recurso compartilhado com o NLog e provavelmente outros).


4

Você também pode considerar o Bloco de Log da Microsoft Enterprise Library . Ele vem com um bom designer.


3
Permite que você o configure visualmente, em vez de criar XML manualmente. Depende do seu gosto ...
Rashack

13
A idéia de usar ferramentas visuais para isso não é uma coisa boa.
Adam Dymitruk

4
Talvez não seja uma coisa boa, mas para o configurador visual do EntLib é necessário. Escrever a configuração manualmente é praticamente impossível, é muito complicado (você sabe, é da Microsoft).
Pavel Hodek

11
Mesmo se alguém não gostou de um designer visual, por que voto negativo! : o
nawfal 02/02

O EntLib faz logon de forma síncrona, pode essencialmente atingir o desempenho.
22713 Michael Freidgeim

2

Eu acho que o consenso geral é que o nlog é um pouco mais fácil de configurar e usar. Ambos são bastante capazes, no entanto.


0

Com base na minha experiência, o SmartInspect supera o NLog e o log4net.

É extremamente fácil de usar, a documentação é excelente e você pode visualizar e filtrar mensagens registradas anteriormente com o visualizador de log interativo, o que é uma enorme vantagem no mundo real.

Uma coisa que eu gosto são as visualizações com guias dos dados, como as guias do navegador no Chrome. Cada guia pode fornecer uma visualização filtrada diferente do log.


11
É um produto pago. NLog e Log4Net são gratuitos.
Zo tem
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.