我需要记录这个,因为我的自定义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
。我将查明原因以及其目的。
log4net.Util.LogLog.Debug(this.GetType(), "testing internal debug");
。 - stuartd