企业库日志记录 - 如何在运行时获取配置的日志记录级别?

时间:2011-05-18 10:39:32

标签: c# logging enterprise-library

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

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

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

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

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

编辑 - 我想在上面的例子中,我可以在每次调用时对方法和类型名称进行硬编码。但我仍然想知道是否有办法确定水平。

2 个答案:

答案 0 :(得分:2)

  

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

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

借用企业库4.1 ShouldLog

中的代码
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类,因此您可能希望在名为LogUtilityShouldLogVerbose的{​​{1}}上创建静态属性,并在该属性内使用“正确地“构造IsVerboseEnabled(为您的应用程序)确定是否将记录该消息。 e.g。

LogEntry

答案 1 :(得分:1)

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

logWriter.TraceSources["category"].Level

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