log4net ведение журнала из веб-приложения - PullRequest
0 голосов
/ 21 декабря 2009

У меня есть библиотека фреймворков, которая делает много вещей, включая ведение журнала. Мы используем log4net для регистрации. Эта структура имеет статический класс ведения журнала LogManager, статический экземпляр ILog (logger) и статические методы для ведения журнала INFO, WARNING, DEBUG и т. Д.

Статический логгер экземпляра инициализируется так:

public static class LogManager
{        
    private static ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    static ActivityLogManager()
    {

    }

    public static void LogDebugy(string message, params object[] messageParameters)
    {
        // Log the message here
    }
}

У меня есть свои сомнения, если это правильный способ сделать это. Из здесь я вижу, что каждый класс, который должен регистрироваться, должен объявлять статический экземпляр ILog.

Также я вижу, что мне нужно было бы указать конфигурационный файл Log4net в моем проекте фреймворка для ведения журнала. Думаю, я прочитал здесь , что конфиг будет получен из исполняемой сборки, но я не вижу, чтобы это произошло.

Есть ли какой-нибудь способ сделать запись в журнале из моего фреймворкового класса с настройкой, получаемой из моего веб-приложения (для моего веб-приложения) или какого-либо другого проекта бизнес-библиотеки (для моих библиотек бизнес-классов)?

Я также хотел бы добавить некоторую пользовательскую информацию в мой журнал (например, пользовательский идентификатор бизнес-объекта и т. Д., Пул приложений, ServerName, ClientHostName, ClientBrowser, ClientOS, Client User и т. Д.). Возможно ли это?

Я использую AdoNetAppender.

Edit1: я использую log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true) в моем файле Assembly.cs, чтобы указать на файл конфигурации log4net.

Edit2: My ILog Logger находится в моей структуре LogManager Class, поэтому для моего приложения создается только один экземпляр.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

Много вопросов, но о первом вопросе, я использую этот стиль для регистратора:

private static ILog Log = LogManager.GetLogger(typeof(MyClass));

Конечно, вы можете называть переменную как угодно, но я думаю, что это рекомендуется командой log4net, так как в результате получается только один ILog -экземпляр на экземпляр вашего класса.

Это более или менее то, что вы уже делаете, так что не о чем беспокоиться. Я не уверен, почему вы проходите длинный путь через метод выполнения.

Обычно я помещаю конфиг в файл Web.config или App.config. Я не могу вывести, если вы используете какой-либо из них для конфигурации. Если вы используете их, это просто. Вы просто добавляете секцию конфигурации для log4net и добавляете необходимые регистраторы, дополнения и фильтры.

Если вы хотите регистрировать пользовательские данные, вы можете добавить их в сообщение журнала, например:

Log.WarnFormat(
    "Reactor malfunction, temperature {0} celsius."
    + "Evacuate sector {1} immediately", 
    temp, 
    sector);

Или, если необходимые значения хранятся в каком-либо объекте, вы можете создать «средство визуализации» для этого типа, которое будет печатать по своему усмотрению, когда объект передается в виде сообщения регистрации, например Log.Warn(myObjWithCustomFormatting).

Средство визуализации объекта должно быть производным от IObjectRenderer и зарегистрировать его в конфигурации.

1 голос
/ 21 декабря 2009

Мы используем log4net во многих наших веб-приложениях, и они в порядке. Существует некоторая специальная настройка, которую необходимо выполнить, если вы хотите войти в журнал событий из веб-приложения, и это зависит от того, какую версию окон вы используете. Короче говоря, требуется, чтобы вы дали разрешение работающему пользователю на запись в журнал событий. Под Win 7, 2008 и т. Д. Вы должны предоставить разрешение всей ветви, а всем остальным - только конкретный журнал приложений.

Если вы хотите войти в файл, просто убедитесь, что файл находится в каталоге приложений, и все должно быть в порядке.

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

...