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

Joh*_*n K 6 .net enterprise-library logging-application-block

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

查询是否记录LogEntry shold [sic].

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

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

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

Ran*_*ica 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每次记录的消息都将调用两次

  • @John,我确定你已经有了这个(:))但是要明确:当你调用`Write`时,Enterprise Library将决定是否应该根据所有过滤器记录`LogEntry`.这意味着没有强制要求检查`ShouldLog`或`IsLoggingEnabled`以防止记录无关的消息. (2认同)