Получить имя текущего файла журнала Enterprise Library 5.0

В MS Enterprise Library 5.0, Ведение журнала приложения, во время выполнения Могу ли я получить имя файла журнала (прослушивателя плоских файлов), в который собирается журнал?

2 ответа

Вы можете получить эту информацию, используя объекты конфигурации:

IConfigurationSource configSource = ConfigurationSourceFactory.Create();
var logSettings = configSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

var flatFileTraceListener = logSettings.TraceListeners
    .First(t => t is FlatFileTraceListenerData) as FlatFileTraceListenerData;

string fileName = flatFileTraceListener.FileName;

Это предполагает, что вы заинтересованы в первом слушателе трассировки, который является FlatFileTraceListener. Если вы хотите получить прослушиватель трассировки по типу и имени, вы можете сделать это тоже:

IConfigurationSource configSource = ConfigurationSourceFactory.Create();
var logSettings = configSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

var flatFileTraceListener = logSettings.TraceListeners
    .FirstOrDefault(t => t is FlatFileTraceListenerData && t.Name == "Flat File Trace Listener")
    as FlatFileTraceListenerData;

string fileName = flatFileTraceListener.FileName;

Изменить Config не проблема.
После изменения имени файла свойство aaa.log -> bbb.log Регистратору не записать в новое имя файла.
Измененный конфиг должен быть сохранен / активирован (?) Или Logger должен быть новый Initialized..!??

    IConfigurationSource configSource = ConfigurationSourceFactory.Create();
    var logSettings = configSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

    var rollFileTraceListener = logSettings.TraceListeners
        .FirstOrDefault(t => t is RollingFlatFileTraceListenerData && t.Name == "RollingFlatFileTraceListener")
        as RollingFlatFileTraceListenerData;

    string fileName = rollFileTraceListener.FileName;
    rollFileTraceListener.FileName = fileName.Replace("aaa", "bbb");

    LogWriterFactory f = new LogWriterFactory(configSource);
    f.Create();
    Logger.Reset();
    LogEntry logEntry = new LogEntry();
    logEntry.Message = $"{DateTime.Now} Count:{333}";
    logEntry.Categories.Clear();
    logEntry.Categories.Add("General");

    Logger.Write(logEntry);
Другие вопросы по тегам