我知道这篇文章要禁用log4net记录器:Stackoverflow: How to completely disable log4net。
但我想知道当我使用这样的代码时,记录器是否实际上处于非活动状态:
log.debug("some debug text");
我考虑在配置文件(app.config)中设置类似配置开关的额外解决方案,它表示我的程序省略或使用部分源代码进行输出记录,例如:
即。在我的app.config
中<appSettings>
<add key="enableLog" value="true"/>
</appSettings>
然后在源代码中: ...确定配置中的值并将其放在局部变量中......
if (enableLog) log.debug("some debug text");
您怎么看?我是否需要这种解决方案以获得更高的性能,还是一个愚蠢的想法?
答案 0 :(得分:4)
这正是log4net的功能。当你打电话
log.debug(“一些调试文本”);
它在内部检查log4net.xml配置文件
<log4net threshold="OFF" /> //it could also be ALL, DEBUG, INFO etc..
如果关闭,它将不再继续记录。
在我看来,没有必要进行这样的优化,因为log4net已经做到了。我不会说额外的一层检查会带来明显的性能提升。这取决于您的应用程序是什么,以及1毫秒是否至关重要。我还可以说log4net非常优化,我从不需要对我的项目进行这样的优化。
答案 1 :(得分:2)
鉴于您正在考虑使用app.config设置...我认为您会发现log4net提供了类似的选项。您可以通过设置日志级别来检查您在log4net配置中控制的IsDebugEnabled标志。
if (Log.IsDebugEnabled)
Log.DebugFormat("My text");
您还可以使用过滤器来阻止所有日志记录。 像
这样的东西<filter type="log4net.Filter.DenyAllFilter" />
希望有帮助。