Например, я использую NHibernate
. Он использует log4net
чтобы выводить свои сообщения, а я использую log4net
для своих целей. И куча хибернейтовских сообщений мне мешают. Очевидное решение данной проблемы - написать собственный фильтр. Фильтр должен наследоваться от абстрактного класса FilterSkeleton
. Вот, что получилось у меня:
using System; using log4net.Filter; namespace Common { class SourceFilter : FilterSkeleton { private string source; private bool acceptOnMatch; public string Source { get { return source; } set { source = value; } } public bool AcceptOnMatch { get { return acceptOnMatch; } set { acceptOnMatch = value; } } public override FilterDecision Decide(log4net.Core.LoggingEvent loggingEvent) { if (loggingEvent.LocationInformation.ClassName.Contains(source) == acceptOnMatch) return FilterDecision.Accept; else return FilterDecision.Deny; } } }
Web.config
добавить в appender следующее:
<filter type="Orpo.Common.SourceFilter"> <Source value="NHibernate"/> <AcceptOnMatch value="false"/> </filter>
NHibernate
никуда не выводятся.
2 комментария:
Хороший пример. Кстати эту же задачу можно решить и стандартным фильтром.
<filter type="log4net.Filter.LoggerMatchFilter">
<LoggerToMatch value="NHibernate"/>
<acceptOnMatch value="false"/>
</filter>
Можно еще так.
Дарья, ваши статьи очень интересны и полезны. Благодарю вас.
Отправить комментарий