单例日志记录器,静态日志记录器,工厂日志记录器...如何记录日志?

10

我正在为一款使用.NET编写的应用程序封装patterns & practices企业库日志应用程序块。

我希望能够创建一个子类化的记录器(即提供特定于领域的日志记录)。

最好的方法是什么?

例如,目前我有一个静态Logger类,但这不允许我针对特定领域进行专门化。

例如,

Log(MyDomainObj obj, string msg)

3个回答

14

看看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"作为"this is a test"消息的一部分。


6

另外,看看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)] - 您要输出的示例消息


6

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接