在 lo4j/net 自定义附加程序中登录的最佳实践

Best practice to log within a lo4j/net custom appender

我需要记录这个,因为我的自定义附加程序 API 正在增长并且需要跟踪可能的错误和各种状态。


我相信在自定义附加程序中使用日志会导致抛出递归错误。

是否有 good/best 在自定义附加程序中记录 info/errors 的做法?

带有 FIleStream 和 FileWriter 的信号量锁似乎没问题,但如果多个进程竞争写入同一个日志文件,它会锁定资源并减慢进程。


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

根据stuartd的建议,LogLog可用于内部调试

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

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 机器能够跟踪。 2 件事要确定。
a) 应用程序文件夹需要存在,因为它不检查日志文件的文件夹是否存在。如果文件夹不存在,则不会创建文件。
b) 需要此程序的管理员权限,否则无法写入文件。

3)

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

在自定义附加程序中,只需使用它来进行内部日志记录。对于输入参数 {0},我不确定为什么它需要 obj Type。我会找出原因和目的。

这应该使用 LogLog class (log4net docs, log4j docs)

这是来自 log4net 文档,但 log4j 非常相似:

Log4net components cannot make log4net logging calls. However, it is sometimes useful for the user to learn about what log4net is doing.

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