什么是基于LogWriter.ShouldLog(LogEntry)方法的行为?

时间:2011-04-05 15:09:28

标签: .net enterprise-library logging-application-block

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

  

查询LogEntry是否为[sic]   记录。

在企业库的所有版本中都有相同的拼写错误,让我想知道作者是否非常关注它。

这个方法对我来说似乎很空灵。我应该在登录前经常检查吗?

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

1 个答案:

答案 0 :(得分:6)

行为

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

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

意图

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

我应该在记录之前经常检查它吗?

一般情况下,除非有令人信服的理由,否则我会避免致电ShouldLog

我可以想到几个原因:

  1. 它使代码混乱
  2. 如果您尝试使用帮助器方法对代码进行去杂乱,那么LogEntry通常会完全填充,因此您可能无论如何都不会避免任何操作(尽管您可以传入委托而不是调用它但是我'我不确定这会让事情变得更简单)
  3. 在内部,Write方法已经调用ShouldLog,因此如果您正在记录,则每次记录的消息将调用ShouldLog两次