我一直都在使用log4net,但有一点我从未弄清楚的是如何判断内部发生了什么 . 例如,我的项目中有一个控制台appender和一个数据库appender . 我对数据库和代码做了一些更改,现在数据库appender不再起作用了 . 我会弄清楚为什么最终,但如果我能看到log4net里面发生了什么,那将会有很大帮助 .
log4net是否生成任何类型的输出,我可以查看以尝试确定问题的根源?
首先,您必须在应用程序配置文件中设置此值:
<configuration> <appSettings> <add key="log4net.Internal.Debug" value="true"/> </appSettings> </configuration>
然后,要确定要在其中保存输出的文件,可以在同一.config文件中添加以下代码:
<configuration> ... <system.diagnostics> <trace autoflush="true"> <listeners> <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\tmp\log4net.txt" /> </listeners> </trace> </system.diagnostics> ... </configuration>
您可以在log4net FAQ page的'How do I enable log4net internal debugging?'下找到更详细的说明 .
如果您使用的是log4net配置文件,您还可以通过将顶部节点更改为以下内容来打开调试:
<log4net debug="true">
重新加载配置并假设您的跟踪侦听器设置正确后,这将起作用 .
除上述答案外,您还可以使用此行实时查看日志,而不是c:\ tmp \ log4net.txt输出 .
log4net.Util.LogLog.InternalDebugging = true;
例如,在控制台应用程序中,您可以添加此项,然后实时查看输出 . 在小型测试工具中调试log4net是很好的,看看你正在测试的appender发生了什么 .
确保入口点所在的根应用程序将日志记录到log4net . 给它一个:
private static ILog logger = LogManager.GetLogger(typeof(Program)); static void Main(string[] args) { logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString());
在2.0.8中,我遇到了一个有趣的情况 . 我创建了一个库项目和一个测试exe项目,它将演示它的功能 . 库项目设置为使用Log4net和exe项目 . exe项目使用assemblyinfo属性来注册配置,但我没有获得控制台或日志文件的日志输出 . 当我打开log4net内部调试日志记录时,我将一些内部消息写入控制台,但仍然没有我的正常日志 . 没有报告错误 . 当我将上面的代码添加到我的程序时,这一切都开始工作了 . 否则Log4net设置正确 .
如果内部日志没有't give you enough information, it',则很容易构建和调试source code . 如果你没有't want to mix this up with your development project, add a simple console application which just logs a message, copy your project' s log4net.config 到这个应用程序,并调试有问题的类 .
log4net.config
在log4net 2.0.8中,似乎无法在单独的dll中使用log4net进行日志记录 . 如果我试过这个,结果很奇怪:不再执行日志记录了 . 使用调试选项初始化log4net不会显示错误 .
就像K0D4所说,你应该在你的主模块中引用log4net,并且应该在程序开始时调用一次,一切都很好 .
在log4net的下一个版本中,这个bug可能会被修复 .
6 回答
首先,您必须在应用程序配置文件中设置此值:
然后,要确定要在其中保存输出的文件,可以在同一.config文件中添加以下代码:
您可以在log4net FAQ page的'How do I enable log4net internal debugging?'下找到更详细的说明 .
如果您使用的是log4net配置文件,您还可以通过将顶部节点更改为以下内容来打开调试:
重新加载配置并假设您的跟踪侦听器设置正确后,这将起作用 .
除上述答案外,您还可以使用此行实时查看日志,而不是c:\ tmp \ log4net.txt输出 .
例如,在控制台应用程序中,您可以添加此项,然后实时查看输出 . 在小型测试工具中调试log4net是很好的,看看你正在测试的appender发生了什么 .
确保入口点所在的根应用程序将日志记录到log4net . 给它一个:
在2.0.8中,我遇到了一个有趣的情况 . 我创建了一个库项目和一个测试exe项目,它将演示它的功能 . 库项目设置为使用Log4net和exe项目 . exe项目使用assemblyinfo属性来注册配置,但我没有获得控制台或日志文件的日志输出 . 当我打开log4net内部调试日志记录时,我将一些内部消息写入控制台,但仍然没有我的正常日志 . 没有报告错误 . 当我将上面的代码添加到我的程序时,这一切都开始工作了 . 否则Log4net设置正确 .
如果内部日志没有't give you enough information, it',则很容易构建和调试source code . 如果你没有't want to mix this up with your development project, add a simple console application which just logs a message, copy your project' s
log4net.config
到这个应用程序,并调试有问题的类 .在log4net 2.0.8中,似乎无法在单独的dll中使用log4net进行日志记录 . 如果我试过这个,结果很奇怪:不再执行日志记录了 . 使用调试选项初始化log4net不会显示错误 .
就像K0D4所说,你应该在你的主模块中引用log4net,并且应该在程序开始时调用一次,一切都很好 .
在log4net的下一个版本中,这个bug可能会被修复 .