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

问题描述:

使用Log4Net进行日志记录时,很容易将称为日志的类放入日志文件中。我在过去发现,这使得跟踪代码和查看类中的流程变得非常简单。在log4net的我用%记录器属性的转换模式,像这样:日志记录应用程序块 - 记录调用者

<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,所以我可以很容易地将错误追溯到该类。

在日志记录应用程序块中,我无法弄清楚如何通过简单的日志调用完成此操作。有谁知道它是如何做到的?如果是这样,一个或多个步骤可能会非常有帮助。

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

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

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

对于繁琐的项目,我们只是写的字符串。我们有一个能够在插入时获取类名的片段。我们也用类名声明const字符串。

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