我正在创建一个使用具有.Net外接程序框架的外接程序的应用程序。我想使用log4net跟踪外接程序内部发生的事情,但我无法将记录的数据写入输出文件。我在主机上成功地使用了log4net。
在我的插件的assemblyinfo.cs中,我添加了下面这行代码:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]这应该会告诉log4net从.config文件中获取配置。
我的外接程序app.config如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener"
initializeData="UpdateModuleLog.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
<log4net>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern
value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="TraceAppender"/>
</root>
</log4net>
</configuration>如预期的那样,插件的app.config被移动到管道中。
在我的插件中,我有以下代码来实例化log4net:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);最后,我在代码中调用log4net,如下所示:
log.InfoFormat("Starting Update Module Version 1.0.0 for Internationalization Database.");问题是UpdateModuleLog.log从未被创建过。我希望它是在宿主应用程序的bin文件夹或管道中的add-ins文件夹中创建的,但这两个位置都不存在。我之所以使用TraceAppender,是因为我想将任何写入调试或跟踪的内容记录到同一个文件中,但如果这需要写入到单独的文件中,那么就这样做吧。
此外,主机进程的日志文件不反映从外接程序完成的任何日志记录。
发布于 2012-02-01 23:46:14
找到答案了。我的app.config缺少这段代码:
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net"/>
</configSections>https://stackoverflow.com/questions/9098047
复制相似问题