2015-02-13 7 views
0

Привет, ребята, сначала извините меня за мой плохой английский, я стараюсь изо всех сил быть максимально точным.Используя log4net с настройкой кода, он дважды записывается в журнал

Я использую log4net 3.5 в .NET Framework 4.5.

Проблема Я на самом деле сталкиваюсь очень часто. log4net записывает все дважды. Он не настроен с xml-файлом, для этого я использую статический класс.

/// <summary> 
/// Diese Klasse konfiguriert die Logs bei ausführungszeit 
/// </summary> 
public static class LoggerSetup 
{ 
    static LoggerSetup() 
    { 
     _fileDirectory = @"Log\"; 
     _archiveInterval = 7; 
     Setup(); 
    } 

    /// <summary> 
    /// Der Ort wo das Logfile gespeichert wird 
    /// </summary> 
    public static string FileDirectory 
    { 
     get 
     { 
      return _fileDirectory; 
     } 
     set 
     { 
      _fileDirectory = value; 
      Setup(); 

     } 
    } 
    private static string _fileDirectory; 

    /// <summary> 
    /// Wieviele Tage die Logfiles im Speicher bleiben 
    /// </summary> 
    public static int ArchiveInterval 
    { 
     get 
     { 
      return _archiveInterval; 
     } 
     set 
     { 
      if (value <= 0) 
       value = 1; 
      _archiveInterval = value; 
      Setup(); 
     } 
    } 
    private static int _archiveInterval; 



    private static void Setup() 
    { 
     // Here the hierarchy object is taken 
     Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 

     // Pattern Layout defined 
     PatternLayout patternLayout = new PatternLayout(); 
     patternLayout.ConversionPattern = "%date [%-5level] %message%newline"; 
     patternLayout.ActivateOptions(); 

     // configurating the RollingFileAppender object 
     RollingFileAppender roller = new RollingFileAppender(); 
     roller.AppendToFile = true; 
     roller.File = FileDirectory + "Log.log"; 
     roller.StaticLogFileName = true; 
     roller.PreserveLogFileNameExtension = true; 
     roller.LockingModel = new FileAppender.MinimalLock(); 
     roller.Layout = patternLayout; 
     roller.MaxSizeRollBackups = ArchiveInterval; 
     roller.RollingStyle = RollingFileAppender.RollingMode.Date; 
     roller.DatePattern = "_yyyy-MM-dd";  
     roller.ActivateOptions(); 

     // Here it is added only once to the Root 
     hierarchy.Root.AddAppender(roller); 

     hierarchy.Root.Level = Level.Info; 
     hierarchy.Configured = true; 
    } 
} 

Я уже смотрел некоторые другие страницы, такие как

В те вопросы, которые я нашел, нить была alaways двойной добавления приложение, в основном они были добавлены в корневой каталог и в объект журнала.

Как вы можете видеть в приведенном выше коде, я делаю это только один раз ... Любые идеи? Метод Setup() вызывается каждый раз, когда свойство обновляется, нигде больше.

Я благодарен за любой ответ, который я получил.

ответ

0

я на самом деле решил сам ... проблема была, что там alaways был новый экземпляр подвижного файла Appender добавлен в корневой EVERYTIME Setup() был выполнен ..

Я решил, что путь :

private static RollingFileAppender _roller; 
    private static PatternLayout _patternLayout; 

    static LoggerSetup() 
    { 
     // root config 
     Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
     hierarchy.Root.Level = Level.Info; 
     hierarchy.Configured = true; 

     // appender vorbereiten 
     _roller = new RollingFileAppender(); 
     _patternLayout = new PatternLayout(); 
     _roller.Layout = _patternLayout; 


     hierarchy.Root.AddAppender(_roller); 

     _fileDirectory = @"Log\"; 
     _archiveInterval = 7; 
     Setup(); 
    } 


    public static void Setup() 
    { 
     _roller.AppendToFile = true; 
     _roller.File = FileDirectory + "Log.log"; 
     _roller.StaticLogFileName = true; 
     _roller.PreserveLogFileNameExtension = true; 
     _roller.LockingModel = new FileAppender.MinimalLock(); 
     _roller.MaxSizeRollBackups = ArchiveInterval; 
     _roller.RollingStyle = RollingFileAppender.RollingMode.Date; 
     _roller.DatePattern = "_yyyy-MM-dd"; 

     _patternLayout.ConversionPattern = "%date [%-5level] %message%newline"; 
     _patternLayout.ActivateOptions(); 

     _roller.ActivateOptions(); 

    } 

Программа установки() теперь может выполняться столько раз, сколько вы хотите, она больше не будет удваивать приложение.

 Смежные вопросы

  • Нет связанных вопросов^_^