Benchmarking 5 bibliotecas populares de registro. net

várias estruturas de registro prometem aos codificadores. NET uma solução de” configuração de cinco minutos e início do registro ” para seus projetos. Decidimos testar essas estruturas para identificar velocidade e conveniência entre elas. Adicionamos conveniência à equação porque a maioria dos codificadores. net sabe que eles podem escrever eventos para o Visualizador de Eventos do Windows sem implementar bibliotecas extras. Esta é a maior conveniência e confiabilidade. No entanto, escrever para o Visualizador de Eventos nem sempre funciona para algumas aplicações, por exemplo, você pode querer gravar eventos em um arquivo de log para compartilhar com outros departamentos ou executar analytics contra um grupo de logs.

o Que Frameworks de Logging Testamos

decidimos testar os cinco principais frameworks de logging no mercado:

  • Log4net
  • ELMAH
  • NLog
  • Microsoft Enterprise Library
  • NSpring

Se você já trabalhou com a empresa de log para .NET, você provavelmente reconhece uma ou duas destas bibliotecas. Para este teste, escrevemos eventos de erro em arquivos para cada teste de estrutura, embora o ELMAH grave automaticamente em arquivos, a menos que você diga especificamente para fazer logon no SQL. A integração SQL do ELMAH o torna um dos nossos favoritos pessoais, mas queríamos manter o nível de campo de jogo e usar Apenas arquivos locais.

nosso ambiente de teste

queríamos dar a esses testes de benchmark um ambiente representativo do mundo real, então os testamos em um servidor que hospeda três aplicativos da web. O ambiente também hospeda SQL Server e MySQL para os três aplicativos. Para simular a carga da CPU, ainda configuramos um processo encadeado separado que gerou números primos enquanto os testes eram executados e cronometrados. O ambiente de trabalho é responsável por números mais altos do que outros benchmarks, mas achamos que é mais realista do que a simples geração de números primos.

nosso servidor de produção é um servidor Windows 2008 com 8 GB de RAM e um processador Intel i5 com quatro núcleos, um núcleo para cada thread. Os aplicativos foram criados usando o Visual Studio 2012. Log4net, NLog, Microsoft Enterprise Library e NSpring foram todos referenciados em aplicativos de console. O ELMAH é um registrador da web, portanto, este aplicativo foi executado em um aplicativo da web no. NET 4.5. Também usamos C# como a estrutura de linguagem principal.

não fizemos muitas configurações para os próprios frameworks. Escolhemos bibliotecas disponíveis no NuGet, para que os desenvolvedores não precisassem baixar bibliotecas específicas e integrar DLLs e soluções de terceiros ao projeto principal.

o projeto consistia apenas nas bibliotecas necessárias para o. NET compilar e executar o código. O código continha um loop que iterava por meio de 100.000 eventos de depuração de gravação para cada estrutura. Um método separado lidou com o thread do número primo.

executamos três testes em cada framework e usamos os resultados médios.

nossos resultados de teste

primeiro, dê uma olhada no gráfico abaixo e você verá o vencedor claro.

netchart

NLog foi o mais rápido, e temos que dizer que foi um dos métodos de registro mais convenientes. A NLog realmente defendeu sua alegação de que você poderia começar a registrar eventos em minutos. Fazer o NLog funcionar com o aplicativo levou duas linhas de Código: uma linha para instanciar a classe principal do logger e a outra para registrar os eventos. Não só foi fácil de configurar, mas levou apenas cerca de 9 segundos para completar 100.000 iterações.

Log4net foi tão conveniente, mas perdeu em termos de desempenho. Tentamos eventos de depuração e erro com log4net, e o registro de depuração foi realmente mais rápido do que os eventos de erro padrão. Em comparação com seus concorrentes, o log4net poderia usar alguns ajustes de desempenho dos desenvolvedores, especialmente para aplicativos corporativos. Era tão conveniente quanto o NLog, mas não podia competir no desempenho.

nosso terceiro favorito é NSpring. O NSpring era fácil de configurar, mas exigia muito mais código para trabalhar com ele. Você deve abrir e fechar eventos nspring logger, que você não precisa fazer com os outros. Mais algumas linhas de código em um aplicativo simples não são muito trabalhosas, mas abrir e fechar variáveis de logger pode ser tedioso para aplicativos corporativos.

das estruturas que testamos em um aplicativo de console, a biblioteca corporativa nativa da Microsoft era a nossa menos favorita. Tem o segundo tempo mais rápido, mas foi extremamente inconveniente. A Microsoft recentemente mudou a maneira como sua estrutura funciona da versão 5 para 6. Na versão 5.0, o codificador poderia fazer uma chamada estática para registrar funções, mas encontramos vários obstáculos para fazer o EntLib funcionar com a versão 6.0. O tempo de configuração para EntLib rebaixa esta biblioteca, embora tenha sido a segunda mais rápida.

o quadro final é ELMAH. ELMAH era originalmente o nosso favorito até testarmos o NLog. ELMAH é um web logger, por isso funciona um pouco diferente dos outros. Ele grava em um arquivo XML por padrão, o que também pode explicar parte de seu atraso.

conclusão

para aplicativos pesados que exigem registro de arquivos e velocidade, o NLog foi claramente o vencedor. O NLog também tem um bom suporte da comunidade com integrações para soluções de gerenciamento de log como Loggly. Se por algum motivo o NLog não for sua escolha, vá com o NSpring. Essas duas estruturas são claramente as mais rápidas. Teríamos escolhido log4net como nossa principal escolha se não fosse pelo desempenho lento. Foi um dos mais fáceis de configurar.

todas essas estruturas estão disponíveis no NuGet, para que você possa experimentá-las por si mesmo.

Deixe uma resposta

O seu endereço de email não será publicado.