Расширение log4net - добавление дополнительных данных в каждый журнал - PullRequest
3 голосов
/ 19 марта 2011

Мы работаем над регистрацией в наших приложениях, используя log4net. Мы хотели бы получать определенную информацию автоматически при каждом вызове. Код, вызывающий log.Info или log.Warn, должен вызывать их как обычно, без указания этой информации.

Я ищу способ создать что-то, что мы можем подключить к log4net. Что-то между приложениями ILog, используемыми для регистрации, и приложениями, так что мы можем как-то поместить эту информацию в сообщение журнала. Либо в ThreadContext, либо в LogEventInfo.

Информация, которую мы ищем, относится к asp.net; URL-адрес запроса, пользовательский агент и т. д. Также есть некоторая информация из файла .config приложений, которую мы хотим включить (идентификатор приложения).

Я хочу попасть между обычным ILog.Info и appender, чтобы эта информация также автоматически включалась для сторонних библиотек, которые также используют log4net (Nhibernate, NServiceBus и т. Д.).

Какие-либо предложения о том, где должна быть расширяемость?

Спасибо

1 Ответ

2 голосов
/ 19 марта 2011

То, что вы ищете, называется контекстом журнала событий.В этом руководстве объясняется, как это работает:

http://www.beefycode.com/post/Log4Net-Tutorial-pt-6-Log-Event-Context.aspx

В частности, вам будет интересна глава «Вычисленные значения контекста».

Обновление:

Моя идея состояла в том, чтобы использовать глобальный контекст.Легко увидеть, как это работает для чего-то вроде идентификатора приложения (фактически там вам даже не нужен вычисляемый объект контекста).Динамическая информация, такая как URL запроса, может быть сделана так:

public class RequestUrlContext
{
    public override string ToString()
    {
        string url;
        // retrieve url from request
        return url;
    }
}

Объект является глобальным, но метод вызывается в потоке, который обрабатывает запрос, и, таким образом, вы получаете правильную информацию.Я также рекомендую создать один класс для «информационной сущности», чтобы обеспечить большую гибкость при выводе в место назначения журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...