我沒有嘗試使用<filter>
,但最近設置了類似的東西,併成功地使用了<switches>
和<sources>
元素。以下是我做的:
<system.diagnostics>
<trace autoflush="true" indentsize="2" />
<sources>
<source name="SyncService" switchName="infoactivity">
<listeners>
<clear />
<add name="file" />
</listeners>
</source>
</sources>
<switches>
<add name="none" value="Off" />
<add name="infoactivity" value="Information, ActivityTracing" />
<...>
</switches>
<sharedListeners>
<add name="file" type="System.Diagnostics.TextWriterTraceListener"
initializeData="sync.log" />
</sharedListeners>
</system.diagnostics>
的switchName
值只是更改爲定義的一個開關來獲得記錄的適當水平。
該代碼使用了一個包裹在LogEvent智能枚舉類中的單個靜態TraceSource(我想我在Jon Skeet的答案之一上找到了一個例子)。
public class LogEvent {
public static readonly LogEvent SyncStart = new LogEvent(1,
"Sync Service started on {0}", TraceEventType.Start);
public static readonly LogEvent SyncStop = new LogEvent(99,
"Sync Service stopped on {0}", TraceEventType.Stop);
public static readonly LogEvent SyncError = new LogEvent(501,
"\r\n=============\r\n{0}\r\n==============\r\n", TraceEventType.Error);
// etc
private readonly int id;
private readonly string format;
private readonly TraceEventType type;
private static readonly TraceSource trace = new TraceSource("SyncService");
private LogEvent(int id, string format, TraceEventType type)
{
this.id = id;
this.format = format;
this.type = type;
}
public void Log(params object[] data)
{
var message = String.Format(format, data);
trace.TraceEvent(type, id, message);
}
}
,並在服務代碼我在日誌語句寬鬆灑
LogEvent.SyncStart.Log(DateTime.Now);
LogEvent.SyncError.Log("What the??? -- " + e.Message);
LogEvent.SyncStop.Log(DateTime.Now);
謝謝,這是一個好主意。不幸的是,這也會導致ConfigurationErrorsException:「無法創建System.Diagnostics.EventTypeFilter」。我認爲initializeData只是作爲字符串傳遞給構造函數 – HugoRune 2012-07-10 13:40:23
您是否嘗試過使用2個偵聽器? <添加名稱= 「prueba1」 類型= 「System.Diagnostics.ConsoleTraceListener」> <濾波器類型= 「System.Diagnostics.EventTypeFilter」 initializeData = 「信息」/> <添加名稱= 「prueba2」 類型= 「System.Diagnostics.ConsoleTraceListener」> <濾波器類型= 「System.Diagnostics.EventTypeFilter」 initializeData = 「ActivityTracing」/> sharedListeners> –
smp
2012-07-11 08:40:26
這可以ConsoleTraceListeners工作(不知道),但是兩個FileTraceListeners不能寫入相同的文件 – HugoRune 2012-07-11 14:08:45