【问题标题】:Singleton logger, static logger, factory logger... how to log?单例记录器、静态记录器、工厂记录器……如何记录?
【发布时间】:2009-08-03 12:46:08
【问题描述】:

我正在为用 .NET 编写的应用程序包装模式和实践企业库日志记录应用程序块。

我希望能够对记录器进行子类化(即提供特定于域的记录)。

最好的方法是什么?

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

例如,

Log(MyDomainObj obj, string msg)

【问题讨论】:

    标签: c# logging


    【解决方案1】:

    查看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”作为“这是一个测试”消息的一部分。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-27
          • 2012-10-08
          • 2014-08-02
          • 2023-04-05
          • 2013-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多