4

我的项目有一个配置文件,其中包含 log4net 记录器的配置。如下:

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <file value="MyLogFile.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <header value ="Start file processing..."/>
        <conversionPattern value="%newline%date - %message%exception" />
        <footer type="log4net.Util.PatternString" value="File processing finished.%newline%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
    </root>
  </log4net>

我想知道是否可以动态更改 my 的值:

<file value="MyLogFile.txt" />
4

4 回答 4

2

动态更改 log4net 配置的最简单方法是设置 xml 配置器以监视配置文件的更改:

[assembly: XmlConfigurator(Watch = true)]

当您对应用程序配置文件(位于 exe 附近)进行一些更改时,log4net 将自动重新配置自身,进一步的输出将转到其他文件。


如果您出于某种原因想要以编程方式执行此操作,那么您需要从 logger 存储库(又名 Hierarchy)获取文件 appender 的实例:

var fileAppender = LogManager.GetLoggerRepository()
                             .GetAppenders()
                             .OfType<FileAppender>()
                             .FirstOrDefault(fa => fa.Name == "LogFileAppender");

并更改它的设置:

if (fileAppender != null)
{
    fileAppender.File = Path.Combine(Environment.CurrentDirectory, "foo.txt");
    fileAppender.ActivateOptions();
}

请记住,这个简单的设置File属性不会打开新文件——它只是设置在 appender 激活期间应该打开的文件名。因此,您需要在更改文件路径后手动激活它。

于 2013-08-06T20:56:13.587 回答
1

是的,您可以在运行时访问 appender 并更改它的属性。只要确保你ActivateOptions在改变任何东西后打电话。

这是一个更改 ADO 附加程序的连接字符串的示例。您应该能够轻松地适应您正在尝试做的事情:

http://blog.gfader.com/2010/05/log4net-how-to-change-settings-of.html

于 2013-08-06T19:07:06.277 回答
0

您可以读取 log4net 文件,在应用程序中使用 xml 解析器对其进行解析并更改文件值属性。然后保存 log4net 文件。如果您有 watch=true,则新配置将被选为新配置。

于 2013-08-06T18:53:15.860 回答
0

你也可以做这样的事情

<file type="log4net.Util.PatternString" value="%property{LogFileName}.log" />

ILog logger = LogManager.GetLogger("SampleAppender");
log4net.GlobalContext.Properties["LogFileName"] = "MyLog";
XmlConfigurator.Configure();
于 2019-01-31T07:23:46.430 回答