RollingFileAppender上的log4net实例中的错误日志行

时间:2018-10-15 12:44:37

标签: c# log4net rollingfileappender

我正在使用log4net根据从SSO获得的实例名称写入不同的文件。该文件名不是静态的,我无法在配置文件中定义。

我已经有很多包含日志指令的文件,所以我必须使用现有的附加程序。

问题是:我发现日志行属于文件Foo_B.txt中的实例A。

也许问题是SetLog4NetAppenderOptions()函数是静态的?还是使用log4net存在多线程问题?例如,也许我需要创建一个追加程序?

Global.asax:

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.xml");

配置

<log4net>
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file type="log4net.Util.PatternString" value="Log\Foo_log.txt"/><!-- used to log before finding instance -->
         <appendToFile value="true"/>
         <maximumFileSize value="5120KB"/>
         <maxSizeRollBackups value="5"/>
         <layout type="log4net.Layout.PatternLayout">
             <conversionPattern value="%date [${COMPUTERNAME}-%thread] %-5level %logger - (%method) - %message%newline" />
         </layout>
    </appender>
        <root>
        <level value="debug"/>
        <appender-ref ref="RollingFile" />
    </root>
</log4net>

在代码文件svc.cs中:

Foo()
{
    Logger.Debug… //Log to generic file
    string instance = LoginSso();
    Logger.Debug  //Log to specific file 
}

然后:

LogUtils.SetLog4NetAppenderOptions(instance);

并在静态实用程序文件中:

public static void SetLog4NetAppenderOptions(string instanceName)
        {
            Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;    
            if (hierarchy != null)
            {                                 
               RollingFileAppender fileAppender = (RollingFileAppender)hierarchy.GetAppenders().Where(x => x.GetType() == typeof(RollingFileAppender)).FirstOrDefault();    
               if (fileAppender != null)
               {
                   fileAppender.File = fileAppender.File.Replace("_log", "_" + instanceName);
                   fileAppender.ActivateOptions();
               }    
            }
        }

0 个答案:

没有答案