至少部分配置确实需要以编程方式完成:
在 Configure() 之前调用它:
log4net.GlobalContext.Properties["SysLogFileName"] = syslogFileName;
使用它来更新:
public static void ChangeSyslogFile(string syslogFileName)
{
var hier = log4net.LogManager.GetRepository() as Hierarchy;
if (hier == null)
{
Console.WriteLine("Unable to change Syslog filename, null hierarchy");
return;
}
var sysLogAppender =
(RollingFileAppender) hier.GetAppenders().
First(appender => appender.Name.Equals("SimulatedSysLogFile",
StringComparison.InvariantCultureIgnoreCase));
if (null == sysLogAppender)
{
Console.WriteLine("Unable to change Syslog filename, appender not found");
return;
}
sysLogAppender.File = syslogFileName;
sysLogAppender.ActivateOptions();
}
这是我的配置:
<appender name="SimulatedSysLogFile" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%property{SysLogFileName}" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<maximumFileSize value="10MB" />
<maxSizeRollBackups value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{M/dd/yyyy h:mm:ss tt} %message %newline" />
</layout>
</appender>