2

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

在日志记录应用程序块中,我无法弄清楚如何通过简单的日志调用来做到这一点。有谁知道怎么做?如果是这样,这样做的示例或步骤将非常有帮助。

4

2 回答 2

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
于 2008-09-19T10:24:25.330 回答
1

我们还没有找到一个不点击 StackTrace 的简单方法。如果这是一个例外,我们只是从中获取:

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

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

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

于 2008-09-19T06:38:11.817 回答