Неправильные строки журнала в экземплярах log4net приложения RollingFile - PullRequest
0 голосов
/ 15 октября 2018

Я использую log4net для записи в разные файлы в зависимости от имени экземпляра, полученного из SSO.Имя файла не является статическим, и я не могу определить его в файле конфигурации.

У меня уже есть много файлов, содержащих инструкции журнала, поэтому я должен использовать существующие приложения.

Проблема заключается в следующем: Iнахожу записи журнала, принадлежащие экземпляру A в файле Foo_B.txt.

Может быть, проблема в том, что функция SetLog4NetAppenderOptions() является статической?Или есть проблема многопоточности с использованием log4net?Может быть, мне нужно создать один appender, например?

Global.asax:

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

Config :

<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();
               }    
            }
        }
...