记录应用程序块 - 记录调用者

时间:2008-09-19 06:12:38

标签: c# logging enterprise-library application-blocks

使用Log4Net进行日志记录时,将调用日志的类放入日志文件中非常容易。我在过去发现,这使得跟踪代码并查看类中的流程变得非常容易。在Log4Net中,我在转换模式中使用%logger属性,如下所示:

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

这给了我想要的输出:

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

您可以从输出中看到调用日志的类是Log4NetTechDemo.Tester,因此我可以很容易地将错误追溯到该类。

在Logging Applicaton Block中,我无法通过简单的日志调用了解如何执行此操作。有谁知道怎么做?如果是这样,一个或多个步骤将非常有用。

2 个答案:

答案 0 :(得分:5)

将调用方法添加到LogEntry的ExtendedProperties字典中;假设您还没有从格式化程序模板中删除ExtendedProperties标记。

将这样的东西放在日志包装器中:

public void LogSomething(string msg)
{
  LogEntry le = new LogEntry { Message = msg };
  le.ExtendedProperties.Add("Called from", new StackFrame(1).GetMethod().ReflectedType);
  Logger.Write(le);
}

在日志末尾调用它会产生类似的结果:

Extended Properties: Called from - LAB_Demo.Tester

答案 1 :(得分:1)

我们没有找到一个简单的方法而没有击中StackTrace。如果这是一个例外,我们只是抓住它:

 StackTrace trace = new StackTrace(ex, true);
 StackFrame frame = trace.GetFrame(0);

对于聊天项目,我们只写字符串。我们有一个片段,可以在插入时获取类名。我们还使用类名声明了const字符串。

不漂亮,但这是我们发现的最好的。我希望其他人在这个帖子中有答案:)