log4net против Nlog

355

У кого-нибудь есть опыт для обоих? Как они складываются друг против друга?

Мы планируем использовать один из них для входа в корпоративное приложение.

Ссылки:

log4net

Nlog

РЕДАКТИРОВАТЬ: У нас нет существующих зависимостей ни nlog или log4net.

Грег Дин
источник
9
Это регистратор, который я использую: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", message));
zumalifeguard
213
Это хорошо для вас, но некоторым людям может потребоваться возможность динамического включения / выключения регистрации, использования различных уровней журнала, автоматического удаления старых данных журнала и т. Д.
Tor Hovland
23
Следует отметить, что документация Log4Net ужасна.
BentOnCoding
Существует подробное сообщение в блоге robertmccarter.com/switching-to-nlog
Майкл Фрейдгейм
2
Вы должны попробовать ReflectInsight. Гораздо более мощный, чем оба insightextensions.codeplex.com
code5

Ответы:

383

Недавно мне было поручено «прототипировать некоторые логи» для предстоящего проекта. У меня не было опыта работы с каркасом. Я исследовал, пробежал учебники, сделал игрушечные приложения и т. Д. В Log4Net, NLog и Enterprise Library в течение нескольких дней. Вернулся через 3-4 недели и собрал их в связное демо. Надеюсь, что-то из этого вам пригодится.

Моя рекомендация для нашего проекта:

  1. Используйте фасад регистрации (например, Common.Logging , SimpleLoggingFacade ), чтобы избежать прямых зависимостей.
  2. Если мы в конечном итоге используем Enterprise Library для других объектов, то и для Logging.
  3. Если мы в конечном итоге используем что-то с зависимостью от Log4Net, используйте Log4Net.
  4. Если ничего из вышеперечисленного, используйте NLog. Который я бы предпочел.

Вот на основании этих выводов (мнений!):

  • Все 3 фреймворка способны и могут делать некоторые сложные вещи. Мы хотим качественное решение, но, честно говоря, не нужны сверхвысокая производительность или 60 типов приемников событий.
  • Все 3 имеют очень похожие основные понятия.
  • У каждого есть свои интересные приемы, такие как действительно продвинутая маршрутизация или динамические имена файлов журналов, усечение файлов и т. Д.
  • Все 3 довольно хорошо документированы по-своему.
  • Для такого новичка, как я, изначально все они были немного неловкими. Здесь нет принципиальных отличий для основ. Я преодолел это.
  • При повторном рассмотрении событий через несколько недель, NLog, очевидно, было проще всего возобновить. Мне нужно было совсем немного освежиться в этом. С Log4Net мне пришлось вернуться к нескольким онлайн-примерам, чтобы начать работу. С EntLib я сдался и делал уроки заново с нуля - я был полностью потерян.
  • Я не мог понять, как заставить EntLib делать такие вещи, как вход в базу данных. Это может быть легко, но это было за пределами моего срока.
  • Log4Net и NLog занимают мало места в коде. EntLib - спам, но я все равно использовал бы фасад.
  • Я случайно неправильно настроил EntLib, и он сказал мне во время выполнения. Log4Net не сделал. У меня не было случайного неправильного конфигурирования с NLog.
  • EntLib поставляется с красивым редактором app.config, который вам нужен на 100%. NLog имеет схему файла конфигурации, поэтому вы получаете «intellisense». Log4Net поставляется с нада.

Очевидно, мне пока нравится NLog. Однако недостаточно использовать его, несмотря на наличие другого решения.

Matt
источник
19
+1 за рекомендацию построить Фасад для истинного разделения проблем (SoC), иначе вы не создадите свой домен.
eduncan911
66
Фасад работает, только если вы можете сделать это, не нарушая диагностические значения, которые зависят от стека вызовов и т. Д. Я видел много фасадов, которые нарушают эти важные диагностические функции, которые в конечном итоге приносят больше вреда, чем пользы ...
Джеймс Щек
11
Log4Net пока не поддерживает клиентские профили .NET 3.5 SP1 и .NET 4, поскольку ссылается на System.Web. Просто хотел указать на это, хотя на самом деле это тесно связано с «зависимостью от Log4Net, используйте Log4Net».
Саймон Д.
59
NLog активно поддерживается ( nlog-project.org/download ), в то время как Log4Net не обновлялась с момента опубликования версии 1.2.10, опубликованной 19 апреля 2006 г. ( Issues.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Джей Синкотта
5
Если у вас есть зависимость от библиотеки, использующей log4net, и вы хотите вместо этого использовать NLog (или наоборот), довольно просто написать и настроить собственный класс Appender для их соединения.
ДБКК
158

Ключевое соображение, которое не особо обсуждается, - это поддержка и обновления.

Log4Net не обновлялся с версии 1.2.10, опубликованной 19 апреля 2006 года .

Напротив, NLog активно поддерживается с 2006 года, и вскоре он выпустит NLog 2.0, поддерживающий многие платформы, которых не было на момент последнего обновления log4net, такие как:

  • NET Framework 2.0 SP1 и выше, 3.5 и 4.0 (клиентские и расширенные профили)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Mono 2.x профиль
Джей Синкотта
источник
30
Но нужно ли его обновить? Если оно не сломано, не почините?
glenneroo
24
Она будет нарушена: разрешение * путает IP адрес между IPv4 / IPv6 для локального хоста на Vista , и Win7 (несколько неофициальных патчей плавают вокруг) * Не компилировать в .Net 4.0 Client Profile
Tormod Hystad
6
В работах для Log4Net, похоже, есть версия .NET 4.0.
scope_creep
38
log4net запустил v1.2.11 в октябре 2011 года . Я думаю, что этот ответ устарел сейчас.
Мариано Дезанце
83
На самом деле, этот ответ все еще был ценным для меня. Я нахожусь в процессе выбора регистратора, и этот ответ говорит нам, что log4net обновлялся один раз за последние пол десятилетия, в то время как NLog - более активный проект.
Batibix
97

Имея опыт работы с обеими фреймворками в последнее время, я подумал, что могу поделиться своими взглядами на каждую фреймворк.

Меня попросили оценить рамки ведения журналов для существующего веб-приложения, и я сузил свой выбор до NLog (v2.0) и log4net (v1.2.11) после прохождения различных онлайн-форумов. Вот мои выводы:

  1. Настройка / запуск с NLog очень прост. Вы просматриваете руководство по началу работы на их веб-сайте, и все готово. Вы понимаете, как все может быть с nlog. Конфиг файл настолько интуитивно понятен, что любой может понять конфигурацию. Например: если вы хотите установить внутренний вход в систему, вы устанавливаете флаг в узле заголовка файла конфигурации Nlog, где вы и ожидаете. В log4net вы устанавливаете различные флаги в разделе appSettings web.config.

  2. В log4net внутренняя регистрация не выводит временную метку, которая раздражает. В Nlog вы получаете хороший журнал с метками времени. Я нашел это очень полезным в моих оценках.

  3. Фильтры в log4net - Вам лучше проверить мой вопрос - фильтр log4net - как написать И фильтр, чтобы игнорировать сообщения журнала, и если вы найдете ответ / решение для этого, пожалуйста, дайте мне знать. Я понимаю, что есть обходной путь для этого вопроса, так как вы можете написать свой собственный фильтр. Но то, что не легко доступно в log4net.

  4. Производительность - я записал около 3000 сообщений журнала в базу данных, используя хранимую процедуру. Я использовал простой цикл for (int i = 0; i <3000; i ++ ... для записи одного и того же сообщения 3000 раз. Для записи: log4net AdoAppender занял почти вдвое больше времени, чем NLog.

  5. Log4net не поддерживает асинхронный appender.

Для меня было достаточным сравнением, чтобы выбрать NLog в качестве основы логирования. :)

Нараян Ахаде
источник
Журналы внутренней отладки log4net: logging.apache.org/log4net/release/sdk/…
Нарайан Ахадэ,
36

Для тех, кто опаздывает в этот поток, вы можете заглянуть в .Net Base Class Library (BCL). Многие люди пропустили изменения между .Net 1.1 и .Net 2.0, когда появился класс TraceSource (около 2005 г.).

Использование TraceSource аналогично другим средам ведения журналов, с детальным контролем ведения журналов, настройкой в ​​app.config / web.config и программным доступом - без дополнительных затрат блока корпоративного приложения.

Есть также ряд сравнений: «log4net vs TraceSource»

Джереми
источник
1
EntLib расширяет TraceSource
Майкл Фрейдгейм
34

Для нас ключевое отличие заключается в общем ...

Посмотрите на Logger.IsDebugEnabledNLog по сравнению с Log4Net, из наших тестов у NLog меньше накладных расходов, и это то, к чему мы стремимся (вещи с низкой задержкой).

Ура, Флориан

Флориан Дойон
источник
25

Сначала посмотрите на остальную часть вашего стека.

Если вы используете NHibernate, он использует Log4Net напрямую. Другие структуры могут иметь другие конкретные регистраторы, которые им нужны.

Кроме этого: оба работают нормально.

Я сам остановился на Log4Net. Это может быть боль в настройке, и если он не настроен правильно, это боль, чтобы выяснить, что пошло не так. Но вы можете заставить его делать почти все, что вы хотите от регистратора.

Если у вас нет постоянной проблемы с Log4Net, вот статья, которую я написал о том, как начать с ней: http://elegantcode.com/2007/12/07/getting-started-with-log4net/

Крис Брандсма
источник
9
@greg: Обратите внимание, что в NHibernate v3, к счастью, зависимость от log4net удалена - она ​​подключаема, поэтому вы можете использовать NLog, если хотите.
UpTheCreek
NLog - это то же самое, что настраивать / выяснять, что же не так. По крайней мере, с log4net вы можете найти документацию и или Google для вопросов.
Mrchief
Хороший момент, если принять во внимание остальную часть вашего стека, я не могу сказать, что это проблема, которую я бы рассмотрел из головы. Хотя кажется, что NHibernate больше не является примером для этого сценария, Sitecore предоставляет современный пример этого, поскольку он использует Log4Net для внутреннего использования. Sitecore довольно расширяемый, так что вы можете использовать все, что предпочитаете, чтобы войти, но это гораздо сложнее, чем редактировать web.config сайта, чтобы добавить свои собственные
логгеры
14

Я повторяю вышеизложенное и предпочитаю nLog. Энтлиб без надобности раздутый.

Re: Log4net Одна вещь, которую ВСЕГДА получает мне с log4net, - это забывание добавить следующее в global.asax для инициализации компонента:

log4net.Config.XmlConfigurator.Configure();
Фрэнсис Шанахан
источник
13

Если вы зайдете сюда, вы найдете исчерпывающую матрицу, включающую библиотеки NLog и Log4Net, а также Enterprise Lib и другие продукты.

Кто-то может поспорить, что матрица сделана таким образом, чтобы подчеркнуть особенности единственной коммерческой библиотеки, присутствующей в матрице. Я думаю, что это правда, но в любом случае было полезно сделать выбор - NLog.

С уважением

Lorenzo
источник
1
Глядя на эту матрицу, она выглядит значительно устаревшей, по крайней мере, по отношению к платформе The Object Guy, которая является коммерческим конкурентом.
Энди Дент
9

Как я заметил, log4net блокирует свои выходные файлы все время работы приложения, поэтому вы не можете их удалить. В остальном они похожи.

Поэтому я предпочитаю NLog.

Виталий Улантиков
источник
22
Чтобы предотвратить это, добавьте <lockModel type = "log4net.Appender.FileAppender + MinimalLock" /> в конфигурацию fileappender (упомянутое на странице примеров log4net: logging.apache.org/log4net/release/config-examples.html )
EventHorizon
9

Бесстыдный плагин для проекта с открытым исходным кодом, который я запускаю, но, учитывая оживленную дискуссию о том, какая среда ведения журналов .NET более активна, я решил опубликовать обязательную ссылку на Serilog .

Для использования в приложении Serilog похож (и сильно использует) log4net. В отличие от других параметров ведения журнала .NET, Serilog предназначен для сохранения структуры событий журнала для автономного анализа. Когда вы пишете:

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

Большинство библиотек журналов немедленно отображают сообщение в строку. Serilog может сделать это тоже, но сохраняет { Answer: 42 }свойство, чтобы позже, используя одно из нескольких хранилищ данных NoSQL, вы могли правильно запрашивать события, основываясь на значенииAnswer .

Мы близки к 1.0 и поддерживаем все современные (.NET 4.5, Windows Store и Windows Phone 8) платформы.

Николас Блумхардт
источник
Но вопрос в том, поддерживает ли он Mono? ;) Это выглядит многообещающе (и я люблю нить и логотип иглы), но не смог найти никакой информации о том, поддерживает ли он Mono или нет.
Ашокгелал
Хороший вопрос :) ... да, у нас есть пользователи на Mono - я не уверен, что они используют сборку Serilog .NET 4.5 или 4.0, но если вы решите какие-либо проблемы, мы поможем.
Николас Блюмхардт
Поддержка .NET 4.5 заставила меня скачать и испытать ваше решение прямо сейчас
Fat Shogun
8

Я тоже второй NLog, потому что он работает и с неуправляемым кодом. Я предполагаю, что можно было бы использовать вместе log4net и log4cxx, но NLog обрабатывает как управляемый, так и неуправляемый код из коробки.

Я также посмотрел на Common.Logging , фасад, который делает абстракцию API регистрации, он поддерживает log4net, NLog и Entreprise Library. Я не думаю, что я буду использовать его, но мне нравится, как они используют лямбда-выражения для повышения производительности, когда ведение журнала отключено (функция, используемая совместно с NLog и, возможно, другими).

eddycharly
источник
4

Вы также можете рассмотреть блокировку журнала Microsoft Enterprise Library . Это идет с хорошим дизайнером.

Rashack
источник
3
Позволяет настроить его визуально, в отличие от ручного создания XML. Зависит от вашего вкуса ...
Рашак
13
Идея использовать визуальные инструменты для такой вещи не очень хорошая вещь.
Адам Димитрук
4
Может быть, не очень хорошая вещь, но для EntLib необходим визуальный конфигуратор. Написание конфигурации вручную практически невозможно, это слишком сложно (вы знаете, это от Microsoft).
Павел Ходек
1
Даже если кому-то не понравился визуальный дизайнер, зачем даунвот! : o
nawfal
EntLib ведет логирование синхронно, это может существенно снизить производительность.
Майкл Фрейдгейм
2

Я думаю, что по общему мнению, nlog немного проще в настройке и использовании. Оба вполне способны, хотя.

tsimon
источник
0

Основываясь на моем опыте, SmartInspect превосходит как NLog, так и log4net.

Он чрезвычайно прост в использовании, документация великолепна, и вы можете просматривать и фильтровать ранее зарегистрированные сообщения с помощью их интерактивного средства просмотра журналов, что является огромным реальным преимуществом.

Одна вещь, которая мне нравится - это представления данных с вкладками, такие как вкладки браузера в Chrome. Каждая вкладка может предоставить различное отфильтрованное представление журнала.

Контанго
источник
11
Это платный продукт. NLog & Log4Net бесплатны.
Зо имеет