Получить имя текущего файла журнала 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);