使用lo4j/net自定义appender记录日志的最佳实践

4

我需要记录这个,因为我的自定义appender API正在增长,需要跟踪可能出现的错误和各种状态。


在自定义appender中使用日志会导致递归错误被抛出。

有什么好的/最佳实践来记录自定义appender内的信息/错误?

使用FileStream和FileWriter的信号量锁似乎可以,但如果多个进程争用同一个日志文件进行写操作,它将锁定资源并减慢进程。


官方来源:http://logging.apache.org/log4net/release/faq.html

如stuartd所建议的,LogLog可用于内部调试。

首先,在项目的~.config文件中,必须设置两件事。

1)

<appSettings>
       <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

这使得log4net/j内部调试成为可能。
2)
<system.diagnostics>
<trace autoflush="true">
  <listeners>
    <add
    name="textWriterTraceListener"
    type="System.Diagnostics.TextWriterTraceListener"
    initializeData="C:\tmp\log4net.txt" />
  </listeners>
</trace>
</system.diagnostics>

这使得Windows机器可以跟踪。需要确保两件事情:
a)应用程序文件夹必须存在,因为它不会检查日志文件的文件夹是否存在。如果文件夹不存在,则文件将无法创建。
b)需要此程序的管理员权限,否则无法编写该文件。

3)

log4net.Util.LogLog.Debug(null, "testing internal debug");

在自定义 appender 中,只需使用此功能进行内部日志记录。对于输入参数 {0},我不确定为什么需要 obj Type。我将查明原因以及其目的。

很抱歉.. SO上找到了一个类似的解决方案。找到了一个类似的线程。 https://dev59.com/QnRA5IYBdhLWcg3w_DHF - user2670633
从源代码来看,传递给LogLog debug的类型是原始类的类型 - 这是有道理的,否则您将不知道它来自哪里,因此您将调用log4net.Util.LogLog.Debug(this.GetType(), "testing internal debug"); - stuartd
1个回答

4

应该使用LogLog类来完成此操作(log4net文档, log4j文档)。

这是log4net文档中的内容,但log4j文档非常相似:

log4net组件不能进行log4net日志记录调用。然而,有时候用户需要了解log4net正在做什么。

要查看输出,您需要启用内部日志记录 - 如何执行此操作取决于您使用的平台。


谢谢,如果启用了Trace并且在项目的~.config文件中将内部日志记录设置为true,则LogLog可以与内部日志记录一起工作。 http://logging.apache.org/log4net/release/faq.html我不能给你点赞,因为我的声望还太低。我已经点击了你的帖子+1。 - user2670633

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接