log4net不会看我的app.config

Fab*_*ian 12 log4net app-config watch appender

我配置我的log4net来监视对app.config文件所做的更改.

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序并更改配置文件中的内容时,这些更改仅在我重新启动应用程序时生效.为什么会这样?

还有办法告诉log4net监视app.config中的更改吗?喜欢:

<appender name="FileAppender" type="log4net.Appender.FileAppender" >
    <watch value="true" />
</appender>
Run Code Online (Sandbox Code Playgroud)

-------------编辑-------------

我现在尝试使用单独的配置文件: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>
Run Code Online (Sandbox Code Playgroud)

在我的assemblyInfo.cs中,我写了以下内容:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

记录到该文件的类如下所示:

ILog myLogger = LogManager.GetLogger(typeof(Form1));
myLogger.Debug("test");
Run Code Online (Sandbox Code Playgroud)

这就像旧版本一样.日志文件条目已经生成,但是当我在运行时更改我的log4net.config时,这些更改不会应用...."Watch = true"应该启用该功能,对吧?

max*_*dbe 14

HA!,我刚遇到同样的问题,运行需要记录的单元测试.
添加此行修复它:

log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

我也有这个:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)


Igo*_*ejc 9

根据log4net文档,Watch功能不适用于应用程序配置文件(app.config,web.config):

由于System.Configuration API不支持重新加载配置文件,因此无法使用log4net.Config.XmlConfigurator.ConfigureAndWatch方法监视配置设置.

因此,如果您需要重新配置log4net配置,则需要将其放在单独的XML文件中,并且您的应用程序需要具有足够的权限来读取该文件:

可以使用任何接受System.IO.FileInfo对象的log4net.Config.XmlConfigurator方法指定要从中读取配置的文件.由于可以监视文件系统的文件更改通知,因此可以使用ConfigureAndWatch方法监视配置文件以进行修改并自动重新配置log4net.