Одиночный регистратор, статический регистратор, заводской регистратор ... как войти - PullRequest
10 голосов
/ 03 августа 2009

Я обертываю шаблоны и методы. Блок приложения ведения журнала Enterprise Library для приложения, написанного на .NET.

Я хочу иметь возможность создавать подкласс логгера (т. Е. Для ведения доменного журнала).

Каков наилучший способ сделать это?

Например, на данный момент у меня есть статический класс Logger, но это не позволяет мне специализировать его для ведения журнала для конкретного домена.

Например,

Log(MyDomainObj obj, string msg)

Ответы [ 3 ]

14 голосов
/ 03 августа 2009

Выезд NLog . Они используют этот тип шаблона:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger();

Затем вы можете специализировать вывод на основе класса, к которому принадлежит myDomainLogger.

Подробнее:

class MyDomain
{
    private static Logger _logger = LogManager.GetCurrentClassLogger();

    private void SomeFunc()
    {
        _logger.Trace("this is a test");
    }
}

Затем в выводе вы можете вывести «MyDomain.SomeFunc» как часть сообщения «это тест».

6 голосов
/ 15 ноября 2011

Вы могли бы даже сделать лучше, чем это. Напишите класс-оболочку, который оборачивает Nlog, log4net или еще много чего. Затем вы можете использовать этот класс-обертку (возможно, использовать интерфейс к нему, если вы действительно хотите отделить вещи) в своем коде. Таким образом, если вы решите изменить класс регистратора, вам нужно изменить только один класс, а не редактировать все ваши классы.

6 голосов
/ 03 августа 2009

Также оформить заказ log4net . Я никогда не находил логирование EL таким гибким, как log4net. Я выбрал log4net, так как я уже был знаком с использованием log4j.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

Делая это таким образом, я могу получить логи вот так:

2009-07-15 09: 48: 51,674 [4420] ОТЛАДКА SampleNamespace.SampleClass [(null)] - Пример сообщения, которое вы хотите вывести

...