.net - LogWriter.ShouldLog(LogEntry) 方法行为基于什么?

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

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

Queries whether a LogEntry shold[sic] be logged.



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

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

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

最佳答案

行为
LogWriter.ShouldLog( LogEntry logEntry )针对 LogEntry 中的数据查询所有已配置的过滤器,以确定是否应记录特定的 LogEntry。如果所有过滤器都返回 true(对于 ShouldLog),那么如果 Write 将记录 LogEntry方法被调用。开箱即用的过滤器是类别、优先级和 LoggingEnabled,尽管您可以创建自己的自定义过滤器。
IsLoggingEnabled相比之下,检查只检查一个过滤器,而 ShouldLog call 检查所有过滤器(包括 IsLoggingEnabled )。

意图

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

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

一般来说,我会避免调用 ShouldLog除非有令人信服的理由不这样做。

我能想到几个原因:

  • 它使代码困惑
  • 如果您尝试使用辅助方法整理代码,那么 LogEntry 通常会被完全填充,因此您可能无论如何都不会避免任何操作(尽管您可以传入一个委托(delegate)而不调用它,但我不确定这让事情变得更简单)
  • 在内部,Write 方法已经调用了 ShouldLog因此,如果您正在登录,那么 ShouldLog记录的每条消息都会被调用两次
  • 关于.net - LogWriter.ShouldLog(LogEntry) 方法行为基于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554127/

    相关文章:

    c# - 将性能计数器与属性一起使用

    c# - 为什么我要替换异常?

    iis - 使用一个日志记录应用程序 block 日志文件的多个进程

    c# - 企业框架日志记录 - ShouldLog 不适用于 SourceLevel 过滤器

    .net - 为什么TreeNodeCollection不会表现出IEnumerable <TreeNode>?

    c# - Windows Phone 8.1 中的相机声音

    c# - 如何将功能按键 (F1..F12) 发送到 .NET 中的控制台应用程序

    .net - .net 托管内存如何处理对象内的值类型?

    c# - 具有自定义参数输入的企业库日志记录数据库跟踪监听器

    enterprise-library - 是否有可以从 Azure 表存储读取日志消息的日志查看器应用程序?