Отказ от нескольких уровней журнала в пределах диапазона с помощью log4net - PullRequest
5 голосов
/ 14 мая 2010

Скажем, я установил minLevel и maxLevel моего логгера log4net на FATAL и DEBUG соответственно, но в некоторых случаях я хочу отключить записи журнала, записанные на уровне WARN, и сохранить все другие уровни в диапазоне активны.

Возможно ли как-то использовать «дискретные» уровни уровней логирования, а не указывать диапазон с помощью minLevel и maxLevel?

Полагаю, это должно быть просто, но я не нашел никаких документов или примеров по log4net, касающихся этой проблемы.

Ответы [ 3 ]

7 голосов
/ 14 мая 2010

Вы можете использовать LevelMatchFilter в вашем приложении.

Пример:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    ...
</appender>

В этом примере будет напечатан только DEBUG; Сообщения INFO и ERROR. Это легко настроить в соответствии с вашими потребностями.

Примечание: не забывайте DenyAllFilter в конце.

2 голосов
/ 22 ноября 2013

Это круто, как все фильтры log4net могут быть объединены для достижения желаемого результата. Все записи журнала по умолчанию имеют расположение фильтра «Нейтральный», а log4net по умолчанию регистрирует все записи, которые являются нейтральными.

Что сделает LevelRangeFilter, если уровень записи находится в диапазоне, он установит расположение фильтра на «Принять» (или оставит свое расположение таким, как было, если для параметра acceptOnMatch установлено значение false) и помечает все записи, не входящие в диапазон, диспозицией «Запретить».

LevelMatchFilter установит расположение для фильтра, указанного в параметре levelToMatch, на «Принять», если acceptToMatch не установлен на false, затем для соответствующих записей будет «Запретить», несопоставленные записи останется тем, кем они были раньше.

Итак, вы можете использовать комбинацию двух фильтров, чтобы получить то, что вы хотите:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <filter type="log4net.Filter.LevelRangeFilter">
       <levelMax value="FATAL" />
       <levelMin value="ERROR" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="WARN" />
        <acceptOnMatch value="false" />
    </filter>
</appender>

Это позволит вам легко включать и выключать уровень предупреждения. Все записи за пределами диапазона уже все помечены как «Запретить», и LevelMatchFilter здесь помечает записи уровня WARN как «Запретить», поэтому DenyAllFilter не требуется.

0 голосов
/ 13 августа 2010

Использовать LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter">
   <levelMax value="FATAL" />
   <levelMin value="ERROR" />
</filter>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...