如何完全禁用记录器

How to completely disable the logger

我知道这个 post 禁用 log4net 记录器:Whosebug: 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");

你怎么看,我需要这样的解决方案来提高性能还是一个愚蠢的想法?

鉴于您正在考虑使用 app.config 设置...我想您会发现 log4net 无论如何都会提供类似的选项。您始终可以通过设置日志级别来检查您在 log4net 配置中控制的 IsDebugEnabled 标志。

if (Log.IsDebugEnabled)
     Log.DebugFormat("My text");

您也可以使用过滤器来阻止所有日志记录。 像

<filter type="log4net.Filter.DenyAllFilter" />

希望对您有所帮助。

这正是 log4net 已经在做的事情。当你打电话给

log.debug("some debug text");

它在内部检查 log4net.xml 配置文件

<log4net threshold="OFF" /> //it could also be ALL, DEBUG, INFO etc..

如果它被关闭,它将不会继续记录。

在我看来,没有必要进行这样的优化,因为 log4net 已经做到了。我不会说额外的检查层会显着提高性能。这取决于您的应用程序是什么以及 1 毫秒是否至关重要。我还可以说 log4net 已经非常优化了,我从来不需要对我的项目进行这样的优化。