在log4net中,如何使用相同的appender,只是使用不同的文件名?

时间:2012-07-14 01:19:25

标签: logging log4net

我有一个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的设置?

2 个答案:

答案 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>