2016-01-04 43 views
1

可以在TraceListener的「initializeData」中添加一個時間戳嗎?我可以使用TraceListener在initializeData中添加時間戳嗎?

事情是這樣的:

<sharedListeners> 
     <add name="AppSourceListener" 
     type="System.Diagnostics.DelimitedListTraceListener" 
     initializeData="c:\test%date.csv" 
     traceOutputOptions="ProcessId, DateTime, Callstack"> 
     </add>  
</sharedListeners> 

我願把DateTime.Now在每個日誌,一旦應用程序被啓動。

+0

重複。如果您使用TraceXXX方法,答案是肯定的:https://stackoverflow.com/questions/863394/add-timestamp-to-trace-writeline?rq=1 – MatthewMartin

回答

1

從.config文件中這是不可能的。要做到這一點從代碼創建TraceListener:

//Remove all existing trace listeners 
while (Trace.Listeners.Count > 0) 
    Trace.Listeners.RemoveAt(0); 
//Add the new one with new file name 
Trace.Listeners.Add(new DelimitedListTraceListener(@"mylogwithdatetime.log")); 
0

這是可能的一種方式。 無論你把「initializeData」放到自定義跟蹤監聽器的構造函數中。所以,如果你有這樣的事情

namespace MyLogger 
{ 
    public class DebugListener :TraceListener 
    { 
     string LogFileName; 
     public DebugListener (string filename) 
     { 
      filename = filename.Replace("@date",DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString()); 
      LogFileName = filename; 
     } 
    } 
} 

和配置

<system.diagnostics> 
    <trace autoflush="true" indentsize="4"> 
    <listeners> 
     <add name="dbgListener" type="MyLogger.DebugListener,MyLogger" initializeData="[email protected]"/> 
    </listeners> 
    </trace> 
</system.diagnostics> 

然後你會得到的文件名的東西作爲MyLog20173.txt 雖然記住構造函數纔會被調用一次,你必須重新啓動應用程序來創建一個新的日誌,但你可以隨時處理你的代碼中的邏輯,就像這個每月創建一個新的日誌文件的邏輯

//get new log file name every month 
string newFileName = string.Format("{0}_{1}{2}.txt","name",DateTime.UtcNow.Year.ToString(CultureInfo.InvariantCulture),DateTime.UtcNow.ToString("MM", CultureInfo.InvariantCulture))`; 
相關問題