1

在MS Enterprise Library 5.0中,日誌記錄應用程序塊在運行時可以獲取日誌將要發往的日誌文件(平面文件偵聽器)的名稱嗎?獲取當前日誌文件的文件名Enterprise Library 5.0

+0

你試過_anything_嗎? – 2013-04-30 08:43:40

+0

我嘗試了LogWriter上提供的各種方法,並嘗試在互聯網上查找是否有人有同樣的問題。 – ViV 2013-04-30 08:58:42

回答

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

更改配置是沒有問題的。
更改文件名屬性後aaa.log - >bbb.log記錄器未寫入新的文件名。
更改的配置必須保存/激活(?)或記錄器必須初始化。

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