Вход в 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 или раздел "Фильтры" в руководстве, для получения более подробной информации.