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

时间:2020-03-06 14:24:53  来源:igfitidea点击:

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

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

这给了我想要的输出:

2008-09-19 15:40:26,906 [3132]错误&lt;b> Log4NetTechDemo.Tester &lt;/ b> [(null)]失败的方法

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

在Logging Applicaton块中,我无法通过简单的日志调用来弄清楚该如何做。有谁知道该怎么做?如果是这样,那么执行此操作的示例或者步骤将非常有帮助。

解决方案

没有找到StackTrace,我们找不到简单的方法。如果是例外,我们可以从中获取:

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

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

不漂亮,但这是我们发现的最好的。我希望别人在这个线程中有一个bettwe答案:)

将调用方法添加到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