log4net против Nlog
15 ответов
Недавно мне было поручено "прототипировать некоторые логи" для предстоящего проекта. У меня не было опыта работы с каркасом. Я исследовал, пробежал учебники, сделал игрушечные приложения и т.д. в Log4Net, NLog и Enterprise Library в течение нескольких дней. Вернулся через 3-4 недели и собрал их в связное демо. Надеюсь, что-то из этого вам пригодится.
Моя рекомендация для нашего проекта:
- Используйте фасад регистрации (например, Common.Logging, SimpleLoggingFacade), чтобы избежать прямых зависимостей.
- Если мы в конечном итоге будем использовать Enterprise Library для других объектов, то и для Logging.
- Если мы в конечном итоге используем что-то с зависимостью от Log4Net, используйте Log4Net.
- Если ничего из вышеперечисленного, используйте NLog. Который я бы предпочел.
Вот на основании этих выводов (мнений!):
- Все 3 фреймворка способны и могут делать некоторые сложные вещи. Мы хотим качественное решение, но, честно говоря, не нужны сверхвысокая производительность или 60 типов приемников событий.
- Все 3 имеют очень похожие основные понятия.
- У каждого есть свои интересные приемы, такие как действительно продвинутая маршрутизация или динамические имена файлов журналов, усечение файлов и т. Д.
- Все 3 довольно хорошо документированы по-своему.
- Для такого новичка, как я, изначально все они были немного неловкими. Здесь нет принципиальных отличий по основам. Я пережил это.
- При повторном рассмотрении событий через несколько недель, NLog, очевидно, было проще всего возобновить. Мне нужно было совсем немного освежиться в этом. С Log4Net мне пришлось вернуться к нескольким онлайн-примерам, чтобы начать работу. С EntLib я сдался и делал учебники заново с нуля - я был полностью потерян.
- Я не мог понять, как заставить EntLib делать такие вещи, как вход в базу данных. Это может быть легко, но это было за пределами моего срока.
- Log4Net и NLog занимают мало места в коде. EntLib - спам, но я все равно использовал бы фасад.
- Я случайно неправильно настроил EntLib, и он сказал мне во время выполнения. Log4Net не сделал. У меня не было случайного неправильного конфигурирования с NLog.
- EntLib поставляется с красивым редактором app.config, который вам нужен на 100%. NLog имеет схему файла конфигурации, поэтому вы получаете "intellisense". Log4Net поставляется с нада.
Очевидно, мне пока нравится NLog. Однако недостаточно использовать его, несмотря на наличие другого решения.
Ключевое соображение, которое не особо обсуждается, - это поддержка и обновления.
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 профиль
Имея опыт работы с обеими фреймворками в последнее время, я подумал, что могу поделиться своими взглядами на каждую фреймворк.
Меня попросили оценить рамки ведения журналов для существующего веб-приложения, и я сузил свой выбор до NLog (v2.0) и log4net (v1.2.11) после прохождения различных онлайн-форумов. Вот мои выводы:
Настройка / запуск с NLog очень прост. Вы просматриваете руководство по началу работы на их веб-сайте, и все готово. Вы понимаете, как это может быть с Nlog. Конфиг файл настолько интуитивно понятен, что любой может понять конфигурацию. Например: если вы хотите установить внутренний вход в систему, вы устанавливаете флаг в узле заголовка файла конфигурации Nlog, где вы и ожидаете. В log4net вы устанавливаете различные флаги в разделе appSettings web.config.
В log4net внутренняя регистрация не выводит временную метку, которая раздражает. В Nlog вы получаете хороший журнал с метками времени. Я нашел это очень полезным в моих оценках.
Фильтры в log4net - Вам лучше проверить мой вопрос - фильтр log4net - как написать И фильтр, чтобы игнорировать сообщения журнала, и если вы найдете ответ / решение для этого, пожалуйста, дайте мне знать. Я понимаю, что есть обходной путь для этого вопроса, так как вы можете написать свой собственный фильтр. Но то, что не легко доступно в log4net.
Производительность - я записал около 3000 сообщений журнала в базу данных, используя хранимую процедуру. Я использовал простой цикл for (int i=0; i<3000; i++... для записи одного и того же сообщения 3000 раз. Для записи: log4net AdoAppender занял почти вдвое больше времени, чем NLog.
Log4net не поддерживает асинхронный appender.
Для меня было достаточным сравнением, чтобы выбрать NLog в качестве основы логирования.:)
Для тех, кто опаздывает в этот поток, вы можете заглянуть в.Net Base Class Library (BCL). Многие люди пропустили изменения между.Net 1.1 и.Net 2.0, когда появился класс TraceSource (около 2005 г.).
Использование TraceSource аналогично другим системам ведения журналов, с детальным контролем ведения журналов, настройкой в app.config/web.config и программным доступом - без накладных расходов блока корпоративного приложения.
- .Net BCL Team Blog: Введение в трассировку - часть I (смотрите также часть II a,b,c)
Есть также ряд сравнений: "log4net vs TraceSource"
Для нас ключевое отличие заключается в общем...
Посмотри на Logger.IsDebugEnabled
В наших тестах NLog и Log4Net показали, что у NLog меньше накладных расходов, и это то, к чему мы стремимся (вещи с малой задержкой).
Ура, Флориан
Сначала посмотрите на остальную часть вашего стека.
Если вы используете NHibernate, он использует Log4Net напрямую. Другие структуры могут иметь другие конкретные регистраторы, которые им нужны.
Кроме этого: оба работают нормально.
Я сам остановился на Log4Net. Это может быть боль в настройке, и если он не настроен правильно, это боль, чтобы выяснить, что пошло не так. Но вы можете заставить его делать практически все, что вы хотите от регистратора.
Если у вас нет постоянной проблемы с Log4Net, вот статья, которую я написал о том, как с ней начать: http://elegantcode.com/2007/12/07/getting-started-with-log4net/
Ну что ж... Я использовал библиотеку Enterprise для задач ведения базы данных, а теперь переключился на NLog из-за узких мест в производительности.
немного информации для сравнения:
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
Я повторяю вышеизложенное и предпочитаю nLog. Энтлиб без надобности раздутый.
Re: Log4net Одна вещь, которую ВСЕГДА дает мне с log4net - это забывает добавить следующее в global.asax для инициализации компонента:
log4net.Config.XmlConfigurator.Configure();
Если вы зайдете сюда, вы найдете исчерпывающую матрицу, включающую библиотеки NLog и Log4Net, а также Enterprise Lib и другие продукты.
Кто-то может поспорить, что матрица сделана таким образом, чтобы подчеркнуть особенности единственной коммерческой библиотеки, присутствующей в матрице. Я думаю, что это правда, но в любом случае было полезно сделать выбор - NLog.
С уважением
Как я заметил, log4net блокирует свои выходные файлы все время работы приложения, поэтому вы не можете их удалить. В остальном они похожи.
Поэтому я предпочитаю NLog.
Бесстыдный плагин для проекта с открытым исходным кодом, который я запускаю, но, учитывая оживленную дискуссию о том, какая среда ведения журналов.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) платформы.
Я тоже второй NLog, потому что он работает и с неуправляемым кодом. Я полагаю, что можно было бы использовать вместе log4net и log4cxx, но NLog обрабатывает как управляемый, так и неуправляемый код из коробки.
Я также посмотрел на Common.Logging, фасад, который делает абстракцию API регистрации, он поддерживает log4net, NLog и Entreprise Library. Я не думаю, что буду использовать его, но мне нравится, как они используют лямбда-выражения для повышения производительности, когда ведение журнала отключено (функция, используемая совместно с NLog и, возможно, другими).
Вы также можете рассмотреть блокировку журнала Microsoft Enterprise Library. Это идет с хорошим дизайнером.
Я думаю, что по общему мнению, nlog немного проще в настройке и использовании. Оба вполне способны, хотя.
Исходя из моего опыта, SmartInspect превосходит как NLog, так и log4net.
Он чрезвычайно прост в использовании, документация великолепна, и вы можете просматривать и фильтровать ранее зарегистрированные сообщения с помощью их интерактивного средства просмотра журналов, что является огромным реальным преимуществом.
Одна вещь, которая мне нравится - это представления данных с вкладками, такие как вкладки браузера в Chrome. Каждая вкладка может предоставить различное отфильтрованное представление журнала.