我将log4net配置为监视对app.config文件所做的更改。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
当我运行我的应用程序并更改配置文件中的内容时,这些更改仅在我重新启动应用程序时生效。为什么会这样?
是否还有一种方法可以告诉log4net监视app.config中的更改?像:
<appender name="FileAppender" type="log4net.Appender.FileAppender" >
<watch value="true" />
</appender>
-------------编辑-------------
我现在尝试使用单独的配置文件:log4net.config 它看起来像这样:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="c:\log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c (line %L) -- %m%n" />
</layout>
</appender>
<root>
<appender-ref ref="FileAppender" />
</root>
</log4net>
在我的assemblyInfo.cs中,我写了以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
记录到该文件的类如下所示:
ILog myLogger = LogManager.GetLogger(typeof(Form1));
myLogger.Debug("test");
这就像旧版本一样。日志文件条目已生成,但是当我在运行时更改我的log4net.config时,这些更改不会应用....“Watch = true”应启用该功能,对吗?
答案 0 :(得分:13)
HA!,我刚遇到同样的问题,运行需要记录的单元测试 添加此行修复了它:
log4net.Config.XmlConfigurator.Configure();
我的App.config:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
我也有这个:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
答案 1 :(得分:9)
根据log4net documentation,Watch功能不适用于应用程序配置文件(app.config,web.config):
因为System.Configuration API不支持重新加载配置文件 无法使用配置设置进行监视 log4net.Config.XmlConfigurator.ConfigureAndWatch方法。
因此,如果您需要重新配置log4net配置,则需要将其放在单独的XML文件中,并且您的应用程序需要具有足够的权限来读取该文件:
可以使用任何接受System.IO.FileInfo对象的log4net.Config.XmlConfigurator方法指定要从中读取配置的文件。由于可以监视文件系统的文件更改通知,因此可以使用ConfigureAndWatch方法监视配置文件以进行修改并自动重新配置log4net。
答案 2 :(得分:0)
即使我参加派对的时间非常晚 - 这里有什么帮助我:在我的计划开始时简单地打电话给log4net.LogManager.GetLogger("DUMMY");
。我把它放在 program.cs 的 Main()方法的第一行。无需将记录器分配给任何对象,只需要对log4net进行礼貌请求以按照所述here读取程序集的属性。
使用属性可以更清晰地定义应用程序配置的加载位置。但值得注意的是,属性纯粹是被动的。它们仅供参考。因此,如果使用配置属性,则必须调用log4net以允许它读取属性。对LogManager.GetLogger的简单调用将导致读取和处理调用程序集上的属性。 因此,必须在应用程序启动期间尽早进行日志记录调用,当然在加载和调用任何外部程序集之前。