Можете ли вы фильтровать на уровне Logger в log4net - PullRequest
4 голосов
/ 15 апреля 2009

Я хочу отфильтровать сообщения, содержащие указанную строку. Я использовал log4net.Filter.StringMatchFilter, но это относится только к appenders.

Я бы хотел отфильтровать это сообщение на уровне Logger. Что-то вроде этого:

<logger name="MyLogger.WebServices">
    <level value="Debug" />
    <filter type="log4net.Filter.StringMatchFilter">
        <stringToMatch value="do not log me" />
        <acceptOnMatch value="false" />
    </filter>
    <appender-ref ref="file" />
    <appender-ref ref="debug" />
</logger>

Это действительно возможно таким образом? Или есть другой способ справиться с этой ситуацией.

1 Ответ

11 голосов
/ 16 апреля 2009

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

Ваш пример будет выглядеть так:

<appender name="screeningAppender" type="log4net.Appenders.ForwardingAppender">
    <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="do not log me" />
            <acceptOnMatch value="false" />
    </filter>

    <appender-ref ref="file" />
    <appender-ref ref="debug" />
</appender>

<logger name="MyLogger.WebServices">
    <level value="Debug" />
    <appender-ref ref="screeningAppender" />
</logger>
...