такой как log4net против класса tracesource [закрыт]
на этой теме многие люди указали, что они использовать log4net. Я поклонник TraceSources и хотел бы знать, почему log4net используется.
вот почему мне нравятся источники трассировки:
- разъемный слушателей - формат XML, текстовый файл, консоль, журнал, свернуть свой собственный
- настраиваемые переключатели трассировки (ошибка, предупреждение, информация, подробный, начало, конец, пользовательский)
- конфигурация
- Блок Регистрации Приложений это просто большой набор TraceListeners
- корреляция действий / областей (например, связать все журналы в пределах ASP.NET запрос с данным клиентом
- Средство просмотра трассировки службы позволяет визуализировать события в отношении этих действий по отдельности
- все это настраивается в приложении.config / web.конфиг.
поскольку .NET framework внутренне использует TraceSources, он также дает мне последовательный способ настройки трассировки - с log4net, у меня есть для настройки log4net, а также TraceSources.
что log4net дает мне, что TraceSources не делают (или это не может быть сделано путем написания нескольких пользовательских TraceListeners)?
5 ответов:
Я думаю, что log4net делает все, что вы перечислили для меня.
Pluggable listeners звучит как appenders - их много, и на самом деле я даже взломал файл журнала rolling, чтобы всегда заканчиваться .журнал (для ассоциаций файлов), добавил поле cc в приложение электронной почты и, наконец, настроил мои любимые значения для цветного консольного приложения. Если позволите быть таким смелым - мое цветное утешительное счастье:
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <!-- Can Use: Blue Green Red White Yellow Purple Cyan HighIntensity --> <mapping> <level value="FATAL" /> <foreColor value="Yellow, HighIntensity" /> <backColor value="Red" /> </mapping> <mapping> <level value="ERROR" /> <foreColor value="White" /> <backColor value="Purple, HighIntensity" /> </mapping> <mapping> <level value="WARN" /> <backColor value="Blue" /> <foreColor value="White" /> </mapping> <mapping> <level value="INFO" /> <backColor value="Green" /> <foreColor value="White" /> </mapping> <mapping> <level value="DEBUG" /> <foreColor value="White" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />--> <!--<conversionPattern value="%-5level %file:%line - %message%newline" />--> <conversionPattern value="%level %logger:%line %newline %message%newline" /> </layout>настраиваемые переключатели трассировки: Log4net только поставляется с фатальной ошибкой предупреждать информацию отладки в порядке увеличения детализации. Единственный, по которому я действительно скучаю,-это аудит того, кто и что делал.
настраиваемая конфигурация: я использую log4net.конфигурационный файл, который я загружаю во время выполнения (или пишу журнал в c:\ нытье, что я не могу найти конфигурацию.)
Try ' Get log4net configuration from file Dim logConfigFile As FileInfo logConfigFile = New FileInfo(".\log4net.config") If logConfigFile.Exists Then XmlConfigurator.Configure(logConfigFile) Else CreateEmergenceLogFile(logConfigFile.FullName) End If Catch ex As Exception Console.Out.WriteLine("Could not load the log4net config file") End Tryпросто большой набор TraceListeners: извините, что пропустил это - я поверю вам на слово.
соотношение деятельности/области: Вы имеете в виду, как каждый файл (read class) получает свой собственный именованный журнал, который может иметь отдельные пороги уровня журнала. На самом деле вы можете сегментировать ведение журнала даже в одном классе (что на самом деле может вырасти, чтобы сделать слишком много ...)
в файле класса:
Private Shared _logger As log4net.ILog = _ log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType) Private Shared _loggerAttribute As log4net.ILog = _ log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Attribute") Private Shared _loggerCache As log4net.ILog = _ log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Cache")Средство просмотра трассировки службы: в log4net.config:
<logger name="NipissingU.ADWrapper.EntryTools.Attribute"> <level value="INFO" /> </logger> <logger name="NipissingU.ADWrapper.EntryTools.Cache"> <level value="WARN" /> </logger>все это настраивается в приложении.config / web.config: ну, может быть, это хорошая вещь в ASP.NET, я не знаю, но при создании богатых клиентских приложений для подсчета бобов мне нравится отдельный конфигурационный файл.
все здесь просто мои собственные маленькие трюки использования.
hth, - Майк
в самые первые дни (.NET 1.0) трассировка в .NET Framework была довольно ограниченной.
например, разделение TraceSource не появилось до .NET 2.0, и у вас было только четыре уровня (ошибка, предупреждение, информация, подробный), хотя вы могли бы использовать полдюжины логических коммутаторов для разделения, если хотите.
log4j популярен в Java и поэтому получил большую поддержку для порта .NET, и как только он стал популярным, он вроде бы остался таким, хотя люди этого не делают даже используйте его правильно (например, обернув его в одноэлементный регистратор и потеряв его основную функцию).
тем не менее, я думаю, что log4net и другие фреймворки (например, NLog, Common.Logging, и даже EntLib) пошли неверным путем, реализовав свою собственную систему ведения журнала с нуля, т. е. изменив даже способ записи операторов журнала в первую очередь.
Я бы предпочел, чтобы усилия, особенно с .NET 2.0, были направлены на расширение прочной основы того, что уже есть . NET. для проекта, который расширяет то, что уже есть, посмотрите на проект Essential Diagnostics на CodePlex (http://essentialdiagnostics.codeplex.com/).
некоторые сильные стороны log4net:
Это похоже на log4j, если вы запускаете смешанную среду и хотите согласованного ведения журнала.
иерархия автоматического регистратора, которая наследует настройки, довольно аккуратна по сравнению с тем, сколько источников трассировки вы реализуете и придется настраивать каждый. (хотя, вероятно, излишне в некоторых случаях).
log4net уже имеет около 28 приложений (эквивалентно прослушивателям трассировки), в то время как система.Диагностика имеет только 10 (но см. существенное.Проект диагностики Для больше), так что если вы действительно думаете, что вам может понадобиться RemoteSyslogAppender, NetSendAppender, AnsiColorTerminalAppender или TelnetAppender, то вам повезло.
недостатки (по сравнению с Система.Диагностика):
вам нужно использовать другой синтаксис ведения журнала, так что если вы уже используете источник.TraceEvent (), вам нужно пройти и заменить все.
Это также распространяется на другой синтаксис для корреляции, поэтому вам нужно перейти от correlationmanager к контекстам log4net.
не легко интегрируется с трассировкой фреймворка (например, WCF).
плохая поддержка Идентификатор события (необходимо использовать отдельный проект расширения IEventLog).
еще не поддерживает трассировку событий для Windows (Vista) или XML-формат средства просмотра трассировки службы.
другая причина для использования TraceSources, а не такой как log4net-это отслеживание себя: Log4Net может использоваться только для ведения журнала (сообщения), но как отслеживать объект (несколько сведений одновременно)? Конечно Log4Net имеет много слушателей implementd, но нужно ли мне все это? В большинстве случаев нет. И если мне нужен специальный слушатель, это не так сложно реализовать мой собственный, не так ли? Например, мне нужен слушатель для трассировки в базу данных (не только сообщения, но и другая информация {string, int и др.} в то же время).
Я прав?
причина, по которой я предпочитаю Log4Net для использования трассировки одного из таргетинга - с Log4Net я могу независимо измерять различные уровни моего приложения (доступ к данным, услуги, бизнес-логика и т. д.) и различные подсистемы (аутентификация, обработка и т. д.) и включать/выключать ведение журнала каждой подсистемы независимо.
эта гибкость позволяет мне настроить детальное ведение журнала для одной подсистемы без включения пожарного шланга для всей системы.
статический методы, предоставляемые в классе Trace [такие как TraceInformation ()], не предоставляют никакого способа указать, из какой подсистемы ведется журнал, поэтому это не так легко обеспечить, написав мой собственный TraceListener.
еще одна причина-производительность-есть часть моего приложения, которая потенциально регистрирует несколько тысяч сообщений в секунду. Log4Net накладывает низкие накладные расходы. В отличие от этого, в последний раз, когда я смотрел на него, блок приложений ведения журнала пересмотрел свою конфигурацию XML для каждого сообщение регистрируется, что делает блок очень тяжелым и медленным.
в то время как я только привык к тому, как работает log4net, очевидным бонусом к использованию этой структуры является немедленное знакомство для тех, кто привык использовать log4j.
еще одно небольшое преимущество заключается в том, что ведение журнала тестирования с использованием log4net чрезвычайно просто; регистраторы реализуют log4net.Выйти из кратера. Опять же, я не знаком с решением Microsoft, но мне интересно, как это сделать, не написав сначала фасад в систему.Диагностика.Класс трассировки.
с беглым взглядом на след исходная документация, я не мог найти эквивалент макетов, и было бы интересно узнать, существует ли такой эквивалент. PatternLayout довольно удобен для форматирования записей журнала с общими данными, такими как метки даты, информация о потоке, контекст журнала и т. д. Log4net PatternLayout docs: http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html
кроме того, учитывая, что написание расширений для структуры ведения журнала, вероятно, является классической "мета-проблемой", log4net действительно приносит большой список подключаемых эквивалентов слушателя к таблице.
список приложений:http://logging.apache.org/log4net/release/config-examples.html
Comments