我有一个log4net文件appender,我的所有日志文件应该使用:
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="..\Logs\"/>
<appendToFile value="true"/>
<datePattern type="log4net.Util.PatternString" value="yyyyMMdd'.Log'"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%-5level][%logger] %message%newline"/>
</layout>
</appender>
目录和日期模式是硬编码的。我有不同的记录器应该使用完全相同的配置,但只是使用不同的文件夹名称。
现在,我最终将每个块复制并粘贴到一个新的appender中,但有没有办法配置log4net以“共享”一个常见的appender的设置?
答案 0 :(得分:0)
除非以编程方式配置log4net,否则无法进行此操作。
答案 1 :(得分:0)
至少部分配置确实需要以编程方式完成:
在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>