2010-12-09 38 views
0

Je voudrais qu'un nouveau fichier journal soit créé chaque fois que l'application démarre. Si un fichier journal existe déjà, j'aimerais que l'existant soit renommé. Est-ce possible? Mon entrée Listener actuelle ressemble à ceciComment forcer un nouveau fichier avec 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" /> 

Que manque-t-il?

Répondre

1

J'ai eu le même problème plusieurs fois. Il ne semble pas y avoir un moyen de résoudre cela d'une manière configurationnelle. Je résous toujours ce problème dans le code dans la classe wrapper.

Je vous recommande d'ajouter timeStampPattern="yyyy-MM-dd" à votre config. Le code fonctionne sans qu'il soit facile de trouver le fichier journal requis.

Le 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; 
     } 
    } 

`

Hope this helps.