我经常使用log4net,但有一件事我从未弄清楚:如何查看内部运行情况。例如,我的项目里有控制台追加器和数据库追加器。我对数据库和代码进行了一些更改,现在数据库追加器不再起作用了。我最终会找到原因,但如果我能看到log4net内部的运行情况,就能帮助我很多了。
问: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页面下找到更详细的解释,如何启用log4net内部调试。
如果您正在使用log4net配置文件,您也可以通过将顶级节点更改为以下内容来启用调试:
<log4net debug="true">
这将在重新加载配置并且您的跟踪侦听器设置正确时起作用。
这将在重新加载配置并且您的跟踪侦听器设置正确时起作用。
除了上面的答案外,您还可以使用此行来实时查看日志,而不是输出到c:\tmp\log4net.txt文件中。
log4net.Util.LogLog.InternalDebugging = true;
例如,在控制台应用程序中,您可以添加此代码并实时查看输出。这对于在小型测试环境中调试log4net并查看您正在测试的appender发生了什么非常有用。
例如,在控制台应用程序中,您可以添加此代码并实时查看输出。这对于在小型测试环境中调试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设置正确。
log4net.config
复制到此应用程序中,并调试相关类。
C:\tmp\log4net.txt
改为C:\log4net.txt
后,便成功生成了文本文件。 - Frank Myat Thu<configSections></configSections>
是<configuration>
下的第一项。否则你会遇到错误。 - Nickadd
标签中设置属性traceOutputOptions="TimeStamp"
和traceOutputOptions="DateTime"
, 但它并没有改变日志文件内容。有人知道如何设置log4net以显示跟踪日志文件中每行/条目的时间吗? - Ulysses Alves