3

我有一个 log4net 文件附加程序配置为我的所有日​​志文件都应该使用:

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

目录和日期模式是硬编码的。我有不同的记录器,它们应该使用完全相同的配置,但只是使用不同的文件夹名称。

现在,我最终将每个块复制并粘贴到一个新的附加程序中,但是有没有办法将 log4net 配置为“共享”一个通用附加程序的设置?

4

2 回答 2

0

除非您以编程方式配置 log4net,否则这是不可能的。

于 2012-07-14T11:05:18.437 回答
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>
于 2012-07-17T18:02:28.803 回答