Log4net против Nlog

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

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

Литература:

log4net

nlog

EDIT: у нас нет существующих зависимостей ни для nlog, ни для log4net.

Ответ 1

Мне недавно было поручено "прототип некоторого loggin" для предстоящего проекта. У меня не было никакого опыта работы с журналами. Я исследовал, прошел через учебные пособия, сделал игрушечные приложения и т.д. В Log4Net, NLog и корпоративной библиотеке в течение нескольких дней. Вернулись 3-4 недели спустя и объединили их в сплоченную демонстрацию. Надеемся, что некоторые из них вам полезны.

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

  • Настройка/запуск с помощью NLog мертв легко. Вы проходите учебник по началу работы на своем веб-сайте, и все готово. Вы понимаете, как обстоят дела с nlog. Файл Config настолько интуитивно понятен, что любой может понять конфигурацию. Например: если вы хотите включить внутреннее ведение журнала, вы устанавливаете флаг в заголовке файла конфигурации Nlog node, в котором вы ожидаете, что это будет. В log4net вы устанавливаете различные флаги в разделе websconfig appSettings.

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

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

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

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

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

Ответ 4

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

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

Существует также ряд сравнений, плавающих вокруг: "log4net vs TraceSource"

Ответ 5

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

Взгляните на Logger.IsDebugEnabled в NLog по сравнению с Log4Net, из наших тестов NLog имеет меньше накладных расходов и то, что мы после (материал с низкой задержкой).

Cheers, Флориан

Ответ 6

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

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

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

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

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

Ответ 8

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

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

log4net.Config.XmlConfigurator.Configure();

Ответ 9

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

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

Привет

Ответ 10

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

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

Ответ 11

Бесстыдный плагин для проекта с открытым исходным кодом, который я запускаю, но учитывая оживленную дискуссию о том, какая платформа ведения журнала .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).

Ответ 12

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

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

Ответ 14

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

Ответ 15

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

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

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