2010-12-09 15 views
0

Ich möchte eine neue Protokolldatei jedes Mal erstellt, wenn die Anwendung gestartet wird. Wenn eine Protokolldatei bereits existiert, möchte ich die vorhandene umbenennen. Ist das möglich? Mein aktueller Listeneintrag sieht so aus:Wie erzwinge ich eine neue Datei mit Rolling Logger

<add name="QueueDiagListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    fileName="C:\Logs\QueueDiag.log" footer="" formatter="MessageOnlyFormatter" 
    header="" rollFileExistsBehavior="Increment" rollSizeKB="1024" /> 

Was fehlt mir?

Antwort

1

Ich hatte das gleiche Problem mehrmals. Es scheint keine Möglichkeit zu geben, dies auf eine konfigurative Weise zu lösen. Ich löse dieses Problem immer in Code in der Wrapper-Klasse.

Ich würde empfehlen, timeStampPattern="yyyy-MM-dd" zu Ihrer Konfiguration hinzuzufügen. Der Code funktioniert, ohne dass es einfacher ist, die erforderliche Protokolldatei zu finden.

Der Code:

`

private static string _loggingOutputFileName; 
    private static string _loggingRollFileFormat; 

    public static void StartNewLogFile() 
    { 
     string fileName = LoggingOutputDirectory.Substring(0, LoggingOutputDirectory.LastIndexOf("\\")) + "\\" + _loggingOutputFileName; 

     if (File.Exists(fileName)) 
     { 
      string backupFileName; 
      int fileIncrement = 1; 

      while (true) 
      { 
       backupFileName = LoggingOutputDirectory.Substring(0, LoggingOutputDirectory.LastIndexOf("\\")) + "\\" + _loggingOutputFileName.Insert(_loggingOutputFileName.LastIndexOf('.'), "." + DateTime.Now.ToString(_loggingRollFileFormat) + "." + fileIncrement); 
       if (!File.Exists(backupFileName)) 
       { 
        break; 
       } 

       fileIncrement++; 
      } 

      File.Move(fileName, backupFileName); 
     } 
    } 

    /// <summary> 
    /// Gets the logging output from the app.config (loggingConfiguration section) 
    /// </summary> 
    private static void GetLoggingSettings() 
    { 
     IConfigurationSource configSource = ConfigurationSourceFactory.Create(); 

     LoggingSettings logSettings = LoggingSettings.GetLoggingSettings(configSource); 

     TraceListenerDataCollection dataCollection = logSettings.TraceListeners; 

     if (dataCollection.Count == 0) 
      return; 

     TraceListenerData traceListenerData = dataCollection.Get(0); 

     if (traceListenerData is RollingFlatFileTraceListenerData) 
     { 
      RollingFlatFileTraceListenerData tld = (RollingFlatFileTraceListenerData)traceListenerData; 
      _loggingOutputFileName = tld.FileName; 
      _loggingRollFileFormat = tld.TimeStampPattern; 
     } 
    } 

    private static string LoggingOutputDirectory 
    { 
     get 
     { 
      // Retrieve the logging settings on first call 
      if (_loggingOutputFileName == null) 
       GetLoggingSettings(); 

      // Guard against null dereference 
      if (_loggingOutputFileName == null) 
       return null; 

      // Get the directory name for logging output 
      FileInfo fileInfo = new FileInfo(_loggingOutputFileName); 
      return fileInfo.DirectoryName; 
     } 
    } 

`

Hoffnung, das hilft.

Verwandte Themen