我正在包装图案&为使用.NET编写的应用程序实践Enterprise Library Logging Application Block。
我希望能够对记录器进行子类化(即提供特定于域的记录)。
这样做的最佳方式是什么?
例如,我目前有一个静态Logger类,但这不允许我将其专门用于特定于域的日志记录。
例如,
Log(MyDomainObj obj, string msg)
答案 0 :(得分:13)
结帐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”作为“这是测试”消息的一部分。
答案 1 :(得分:5)
另外,结帐log4net。我从未发现EL的日志记录与log4net一样灵活。我选择了log4net,因为我已经熟悉使用log4j。
protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
这样做,我可以得到这样的日志:
2009-07-15 09:48:51,674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - 要输出的示例消息
答案 2 :(得分:5)
你甚至可以做得更好。编写一个包装Nlog或log4net或其他东西的包装类。然后,您可以在代码中使用该包装类(如果您真的想要解耦,可以使用它的接口)。这样,如果您决定更改记录器类,则只需更改一个类而不是编辑所有类。