【问题标题】:Enterprise Library logging - how to get the configured logging level at runtime?企业库日志记录 - 如何在运行时获取配置的日志记录级别?
【发布时间】:2011-08-27 22:52:29
【问题描述】:

我们正在使用 Enterprise Library 4.1 进行日志记录(以及异常处理/加密)。

有人知道在运行时确定配置的日志记录级别的好方法吗?我编写了一个 LogUtility 类来进行日志记录调用,并按照此示例调用它:

LogUtility.LogVerbose(
    string.Format("Processing event {0}", currentEvent.EventIDImported), 
    MethodBase.GetCurrentMethod().Name, 
    this.GetType().Name
);

我知道它实际上不会被记录到文件中,除非日志记录级别设置为适当的级别,在我的例子中是 app.config。但我真的不希望评估方法参数,即方法和类型名称,以及在某些情况下记录的实际字符串,除非绝对必要。

这似乎是一个有效的担忧吗?我们的应用程序可以有数千万次迭代和日志记录点。如果可能的话,我想根据配置的日志级别设置一个标志,并在进行上述方法调用之前进行检查。

编辑-我想就上面的示例而言,我可以在每次调用时对方法和类型名称进行硬编码。不过我还是想知道有没有办法确定等级。

【问题讨论】:

  • 这确实是一个值得关注的问题。

标签: c# logging enterprise-library


【解决方案1】:

我真的不想要这个方法 参数,即方法和类型 名称,在某些情况下是实际的 正在记录的字符串,以进行评估 除非绝对必要。

基于以上我认为你应该看看LogWriter的ShouldLog方法。它可以让您确定是否将根据当前配置记录 LogEntry,并且您可以(希望)避免创建不需要的对象。

从 Enterprise Library 4.1 借用代码Walkthrough: Checking Filter Status Before Constructing Log Messages:

LogEntry logEntry = new LogEntry();
logEntry.Priority = 2;
logEntry.Categories.Add("Trace");
logEntry.Categories.Add("UI Events");

if (Logger.ShouldLog(logEntry))
{
  // Perform operations (possibly expensive) to gather additional information 
  // for the event to be logged. 
}
else
{
  // Event will not be logged. Your application can avoid the performance
  // penalty of collecting information for an event that will not be
  // logged.
}

由于您使用自己的LogUtility 类,您可能希望在LogUtility 上创建一个名为ShouldLogVerbose 或IsVerboseEnabled 的静态属性,并在该属性内部使用“正确”构造的LogEntry(例如您的应用程序)以确定是否将记录该消息。例如

if (LogUtility.IsVerboseEnabled)
{
    LogUtility.LogVerbose(
        string.Format("Processing event {0}", currentEvent.EventIDImported), 
        MethodBase.GetCurrentMethod().Name, 
        this.GetType().Name
    );
}

【讨论】:

  • 感谢您为我指明正确的方向;这正是我想要的。我打算按照您的描述创建一个静态属性,但不确定如何获取布尔值 - “ShouldLog”是我所追求的。
【解决方案2】:

对于给定的类别,您可以执行以下操作:

logWriter.TraceSources["category"].Level

见http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.logging.logsource_members.aspx

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 2010-12-18
    • 2011-02-27
    • 1970-01-01
    • 2011-07-19
    • 2010-12-17
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多