6

LogWriter.ShouldLog(..)方法行为基于什么?或者它使用的真正意图是什么?它的文档页面相当稀疏,并没有提供太多的洞察力。引用它:

查询是否记录 LogEntry [sic]。

在所有版本的企业库中都有相同的错字,让我怀疑作者是否非常关注它。

这种方法对我来说似乎相当空灵。我应该在登录前检查它吗?

目前我只检查LogWriter.IsLoggingEnabled(..)哪个基于配置中的显式设置。这代表了一个具体的场景:日志记录要么打开要么关闭。

4

1 回答 1

6

行为

LogWriter.ShouldLog( LogEntry logEntry )针对 LogEntry 中的数据查询所有已配置的过滤器,以确定是否应记录特定的 LogEntry。Write如果所有过滤器都返回 true(对于 ShouldLog),则在调用该方法时将记录 LogEntry 。开箱即用的过滤器是类别、优先级和 LoggingEnabled,尽管您可以创建自己的自定义过滤器。

相比之下,IsLoggingEnabled检查只检查一个过滤器,而ShouldLog调用检查所有过滤器(包括IsLoggingEnabled)。

意图

调用的目的是让开发人员在LogEntry不记录的情况下避免昂贵的操作。什么“昂贵”将取决于应用程序和要求。例如,在一个紧密的循环中过度的字符串操作,或者可能是一个进程外调用来检索一些信息(尽管这可能是一个很好的缓存候选者!)。

我应该在登录前检查它吗?

一般来说,ShouldLog除非有令人信服的理由不这样做,否则我会避免打电话。

我能想到几个原因:

  1. 它使代码混乱
  2. 如果您尝试使用辅助方法整理代码,那么 LogEntry 通常会被完全填充,因此您可能无论如何都不会避免任何操作(尽管您可以传入委托而不调用它,但我不确定这让事情变得更简单)
  3. 在内部,Write 方法已经调用ShouldLog,所以如果你正在记录,那么ShouldLog对于每条记录的消息都会被调用两次
于 2011-04-05T20:27:39.403 回答