Singleton记录器,静态记录器,工厂记录器......如何记录?

gee*_*jay 10 c# logging

我正在为.NET编写的应用程序包装模式和实践Enterprise Library Logging Application Block.

我希望能够子类化记录器(即提供特定于域的日志记录).

做这个的最好方式是什么?

例如,我目前有一个静态Logger类,但这不允许我专门针对特定于域的日志记录.

例如,

Log(MyDomainObj obj, string msg)

Gab*_*abe 14

看看NLog.他们使用这种模式:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger();
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据myDomainLogger属于的类来专门化输出.

更多详情:

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

    private void SomeFunc()
    {
        _logger.Trace("this is a test");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的输出中,您可以输出"MyDomain.SomeFunc"作为"这是测试"消息的一部分.


tho*_*com 6

另外,结帐log4net.我从未发现EL的日志记录与log4net一样灵活.我选择了log4net,因为我已经熟悉使用log4j.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

这样做,我可以得到这样的日志:

2009-07-15 09:48:51,674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - 要输出的示例消息


Sar*_*ica 6

你甚至可以做得更好.编写一个包装Nlog或log4net或其他东西的包装类.然后,您可以在代码中使用该包装类(如果您真的想要解耦,可以使用它的接口).这样,如果您决定更改记录器类,则只需更改一个类而不是编辑所有类.

  • 从设计的角度来看,这是要走的路. (3认同)