如何完全禁用记录器

时间:2017-01-26 08:37:19

标签: c# log4net

我知道这篇文章要禁用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");

您怎么看?我是否需要这种解决方案以获得更高的性能,还是一个愚蠢的想法?

2 个答案:

答案 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" />

希望有帮助。