使用log4net包含日志记录的最佳做法是什么?

Ian*_*ose 19 .net wcf log4net

我被告知使用log4net将"日志记录"添加到我的代码中,问题是没有人可以及时访问并查看需要使用日志记录解决的实际问题.

因此,无论如何都要有一套指导,以便进行合理的成本/收益交易

因此:

应该在以后有用的应用程序中添加哪种日志记录?

(代码使用了很多WCF,一方是Winforms,另一方是通常在同一台机器上运行的"服务器")

-

我已经将AJM的答案排除在做有用的博客文章之前,并指出了很多评论,但如果有人想出一套很好的" 经验法则 ",我很可能会改变预期的答案.

cjk*_*cjk 8

需要记住的一点是,虽然您的配置将处理不同级别的日志记录,但您可能会在日志调用中造成大量开销.例如:

// some kind of loop
// do some operations
Logger.LogDebug(myObject.GetXmlRepresentation());
// end loop
Run Code Online (Sandbox Code Playgroud)

如果您有一个记录器侦听DEBUG日志,这显然只会记录该对象,但是无论您的日志记录级别如何,构建XML对象的调用都会运行,并且可能导致一些相当大的速度减慢.


正确的解决方案是:

// some kind of loop
// do some operations
if (Logger.IsDebug)
{
    Logger.LogDebug(myObject.GetXmlRepresentation());
}
// end loop
Run Code Online (Sandbox Code Playgroud)


AJM*_*AJM 6

我发现这篇文章非常有用:http://blog.codinghorror.com/the-problem-with-logging/

特别是我认为极简主义的方法确实是要走的路.在过去,我试图记录太多,但这会使代码膨胀

还认为越多的日志条目越好,因为它会使日志本身膨胀.我现在将loggings的主要好处看作是提供"立足点"或概述正在发生的事情.如果特定区域需要更多细节,那么它是默认位置应该更少更好


Bri*_*ntz 5

我最喜欢这类问题的信息来源是Release It--一本来自Pragmatic人的书.强烈推荐.

他们关于您的问题的基本观点是,日志记录应该针对运营级别所需的内容.运营人员最关心的是网站可能出现故障的特殊情况(即连接池已满,与服务器的连接已关闭等)确保消息不言自明,并且非常清楚问题是什么,如果适用,修复是什么.写下供人食用的信息.

我在功能进入/退出样式日志中看到了一点点.顶级捕获异常的堆栈跟踪很有用,可以记录可能发生系统崩溃的区域(即完整连接池),以及记录系统崩溃之前的区域.