2012-05-03 2 views
0

У меня есть консольное приложение, которое записывает в скользящий файл журнала. Проблема в том, что приложение может быть вызвано несколькими процессами, и есть вероятность, что он будет вызываться одновременно. Приложение записывает в один файл журнала. Я в настоящее время исследования с помощью log4net с установкой MinimalLock:Структура ведения журнала для .NET, которая поддерживает несколько приложений, записывающих один и тот же файл скользящего журнала?

<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" /> 

, но я читал, что проблемы могут возникнуть, если сообщение регистрации от одного экземпляра вызывает пролонгировать, а другой экземпляр пытается писать в тот же файл ,

Есть ли другая структура, поддерживающая это поведение, или, возможно, подходящее обходное решение?

ответ

1

попробовать <lockingModel type="log4net.Appender.FileAppender+InterProcessLock"

Теперь следующий код будет поточно, потому что вы будете создавать регистратор статический класс для регистрации информации.

public static class Logger 
{ 
    private static readonly Object obj = new Object(); 

    private static ILog _appLog = null; 
    static Logger() 
    { 
     XmlConfigurator.Configure(); 
    } 

    public static void Log(string loggername) 
    { 
     lock (obj) 
     { 
      _appLog = LogManager.GetLogger(loggername); 
      _appLog.Error(....); 
     } 
    } 
} 
+0

Из FAQ: «RollingFileAppender полностью игнорирует модель блокировки при перекатывании файлов, файлы перегрузки просто не совместимы с этим сценарием». – ilitirit