При сравнении NLOG и LOG4NET для использования с MVVMCross появляются несколько различий и соображений производительности:
1. Обзор производительности:
- NLOG обычно считается быстрее, чем log4net. Он был оптимизирован для скорости и эффективности, что делает его подходящим для высокопроизводительных сценариев регистрации. Последние версии NLOG еще больше улучшили скорость своей инициализации, пропустив автоматическое сканирование расширений, если только явно требуется [9] [10].
- Log4net, хотя и надежный, имеет тенденцию быть медленнее, особенно в сценариях, включающих большой объем сообщений журнала. У него не хватает встроенной асинхронной поддержки регистрации, которая может повлиять на производительность в одновременных средах [4] [10].
2. Асинхронная регистрация:
-NLOG обеспечивает встроенную асинхронную поддержку ведения журнала, которая полезна для приложений, которые требуют неблокирующих операций ведения журнала. Эта функция помогает поддерживать отзывчивость приложений путем разгрузки записи журнала в фоновые потоки [1] [6].
- Log4net не обладает нативными асинхронными возможностями журнала. Пользователи должны полагаться на внешние пакеты или пользовательские реализации для достижения асинхронного журнала, что может добавить сложность и накладные расходы [4].
3. Структурированная регистрация:
- NLOG поддерживает структурированную регистрацию, хотя он не такой устойчивый, как реализация Serilog. Структурированная регистрация NLOG может быть достигнута с помощью его визуализаторов и свойств макета, которые позволяют семантическую регистрацию без дополнительных накладных расходов [6] [7].
- Log4net по своей сути не поддерживает структурированную ведение журнала. Несмотря на то, что он может быть расширен с помощью пользовательских приложений для достижения некоторого уровня структурированного ведения журнала, он не такой прост или эффективен, как NLOG или Serilog [7].
4. Конфигурация и настройка:
- NLOG предлагает более современный API и, как правило, его легче настраивать, особенно для разработчиков, знакомых с ядром .NET или CORE ASP.NET. Его конфигурация может быть сделана через XML, JSON или код [1] [7].
- Log4net имеет более традиционный подход конфигурации, в основном используя XML. Хотя он широко принят и имеет обширные ресурсы, его конфигурация может быть более громоздкой для некоторых пользователей [7].
5. Сообщество и поддержка:
- Обе рамки имеют большие сообщества, но NLOG имеет тенденцию обладать более активным развитием и выпусками. Это может быть важно для проектов, требующих постоянной поддержки и обновлений [11].
- log4net является зрелым и широко используемым, но его цикл высвобождения медленнее по сравнению с NLOG [11].
Таким образом, NLOG предлагает лучшую производительность, асинхронные возможности для ведения журнала и структурированную поддержку журнала, что делает его более подходящим выбором для проектов с высокими требованиями регистрации или интеграции с современными средами .NET. Log4net, хотя и надежный и широко принятый, может потребовать более индивидуальной работы для расширенных функций, и ему не хватает края производительности NLOG. Для проектов MVVMcross преимущества NLOG в области скорости и гибкости могут сделать его предпочтительным вариантом, если только конкретные требования или существующие инфраструктуры предпочитают log4net.
Цитаты:[1] https://wirefuture.com/post/mastering-application-insights-logging-using-nlog-log4net-and-serilog
[2] https://www.reddit.com/r/dotnet/comments/9cziy4/nlog_vs_log4net_vs_serolog_compare_net_logging/
[3] https://blog.ndepend.com/log4net-vs-nlog/
[4] https://stackoverflow.com/questions/710863/log4net-vs-nlog
[5] https://kellermansoftware.com/products/net-logging-library
[6] https://www.bytehide.com/blog/serolog-log4net-nlog-comparison
[7] https://blog.elmah.io/nlog-vs-log4net/
[8] https://betterstack.com/community/guides/logging/best-dotnet-logging-libraries/
[9] https://nlog-project.org/2021/08/25/nlog-5-0-preview1-ready.html
[10] https://hansamaligamage.github.io/2016/05/29/nlog-configurations/
[11] https://michaelscodingspot.com/logging-in-dotnet/