代码之家  ›  专栏  ›  技术社区  ›  geejay

单件记录器,静态记录器,工厂记录器…如何记录?

  •  9
  • geejay  · 技术社区  · 16 年前

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

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

    最好的方法是什么?

    例如,我现在有一个静态的logger类,但这不允许我将它专门用于特定于域的日志记录。

    例如,

    Log(MyDomainObj obj, string msg)

    3 回复  |  直到 14 年前
        1
  •  13
  •   Gabe    16 年前

    退房 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
  •  5
  •   tom    16 年前

    此外,结帐 log4net .我从来没有发现EL的日志像log4net那样灵活。我选择log4net是因为我已经熟悉使用log4j。

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

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

    2009-07-15 09:48:51674[4420]调试 sampleNamespace.sampleClass[(空)]- 要输出的示例消息

        3
  •  5
  •   Sardathrion - against SE abuse    14 年前

    你甚至可以做得更好。编写一个包装类,该类包装nlog、log4net或whatnot。然后,您可以在代码中使用包装类(如果您真的想去耦的话,可以使用它的接口)。这样,如果您决定更改logger类,您只需要更改一个类,而不需要编辑所有类。