Вход в log4net для разных приложений, в зависимости от обстоятельств

Я использую log4net и в одном классе требую входа в приложение RollingFile, но затем в другом классе я хочу войти в журнал событий + переходящий файл + консольный приложение.

Какова лучшая практика? и могу ли я увидеть пример кода?

Кстати, чтобы сделать вещи более сложными, я использую Castle Windsor Logging Facility с Log4net, чтобы разрешить мой экземпляр Logger.

Если это поможет, я подумал об этом ниже, но понятия не имею, является ли это наилучшей практикой или как активировать определенный регистратор на основе "имени", все еще используя мой текущий экземпляр регистратора из windsor:

log4net.config:

...
    <logger name="EventLogOnly">
      <level value="ALL" />
      <appender-ref ref="EventLogAppender" />
    </logger>
    <logger name="ConsoleEventLog">
      <level value="ALL" />
      <appender-ref ref="ColoredConsoleAppender" />
      <appender-ref ref="EventLogAppender" />
    </logger>
...

Замок Виндзор контейнеровоз класса:

container.AddFacility("logging.facility", 
   new LoggingFacility(LoggerImplementation.Log4net, "log4net.config"));

класс для входа в систему:

private ILogger Logger;
public Test(ILogger logger) {
  Logger.Info("Can I log under event log only?");
  Logger.Info("Now can I log under both?");
}

Спасибо, парни.

1 ответ

Решение

Вы можете сделать это, применив фильтр к appender. Только если событие журнала проходит фильтр, событие регистрируется этим приложением.

Эта конфигурация фильтра будет регистрировать только те события, которые поступают от регистратора с именем "MyLogger":

<appender name="EventLogAppender" ...
    <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="MyLogger" />
    </filter>       
    <filter type="log4net.Filter.DenyAllFilter" />
</appender>

... и это будет соответствовать сообщениям журнала с определенным содержащимся текстом:

<filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="database" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

С фильтрами возможна хорошая настройка. См. Log4net SDK или раздел "Фильтры" в руководстве, для получения более подробной информации.

Другие вопросы по тегам