Как заставить новый файл с Rolling Logger - PullRequest
0 голосов
/ 09 декабря 2010

Я хотел бы, чтобы новый файл журнала создавался при каждом запуске приложения.Если файл журнала уже существует, я хотел бы переименовать существующий.Это возможно?Моя текущая запись в Слушателе выглядит так

  <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" />

Что мне не хватает?

1 Ответ

1 голос
/ 17 марта 2011

У меня была одна и та же проблема много раз. Кажется, нет способа решить эту проблему в конфигурации. Я всегда решаю эту проблему в коде в классе оболочки.

Я бы порекомендовал добавить timeStampPattern="yyyy-MM-dd" в вашу конфигурацию. Код работает без него, просто найти нужный файл журнала.

Код:

`

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

`

Надеюсь, это поможет.

...