Joh*_*ant 182 .net logging log4net
我一直都在使用log4net,但有一点我从未弄清楚的是如何判断内部发生了什么.例如,我的项目中有一个控制台appender和一个数据库appender.我对数据库和代码做了一些更改,现在数据库appender不再起作用了.我会弄清楚为什么最终,但如果我能看到log4net里面发生了什么,那将会有很大帮助.
log4net是否生成任何类型的输出,我可以查看以尝试确定问题的根源?
Dav*_*art 280
首先,您必须在应用程序配置文件中设置此值:
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
然后,要确定要在其中保存输出的文件,可以在同一.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>
Run Code Online (Sandbox Code Playgroud)
您可以在"如何启用log4net内部调试?"下找到更详细的说明.在log4net FAQ页面中.
Bol*_*olo 38
如果您使用的是log4net配置文件,您还可以通过将顶部节点更改为以下内容来打开调试:
<log4net debug="true">
Run Code Online (Sandbox Code Playgroud)
重新加载配置并假设您的跟踪侦听器设置正确后,这将起作用.
JP *_*oto 22
除上述答案外,您还可以使用此行实时查看日志,而不是c:\ tmp\log4net.txt输出.
log4net.Util.LogLog.InternalDebugging = true;
Run Code Online (Sandbox Code Playgroud)
例如,在控制台应用程序中,您可以添加此项,然后实时查看输出.在小型测试工具中调试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());
Run Code Online (Sandbox Code Playgroud)
使用2.0.8时,我遇到了一个有趣的情况。我创建了一个库项目和一个测试exe项目,以演示其功能。库项目被设置为与exe项目一样使用Log4net。exe项目使用assemblyinfo属性注册了配置,但是我没有将日志记录输出到控制台或日志文件。当我打开log4net内部调试日志记录时,我收到了一些写入控制台的内部消息,但是仍然没有我的普通日志。没有错误被报告。当我将上述代码添加到程序中时,一切都开始工作。Log4net否则已正确设置。