聲明:我貢獻在微軟
您內部TraceEvent可以追加到使用EVENT_TRACE_FILE_APPEND_MODE一個ETW文件,TraceEvent今天不支持。我們可以添加它,但是我可以看到暴露API的更多問題。
TL; DR - 完整的ETW會話及其元數據是登錄到每個文件的內容,每個會話可以有不同的選項,例如時鐘分辨率,例如可能會導致微妙的時間戳錯誤,在某些時候引起你的不滿。
這是我的建議。我已經進入了睡眠階段,但是您會放入一些邏輯來決定如何輪換文件(例如,在您的IIS實例刷新時保持跟蹤)。
var _etwSession = new TraceEventSession("MyEtwLog", @"C:\Logs\MyEtwLog." + MyTimestamp + ".etl");
_etwSession.EnableProvider(new Guid("MyGuid"), TraceEventLevel.Always);
Thread.Sleep(1000 * 60);
_etwSession.SetFileName(@"C:\Logs\MyEtwLog" + timestamp + ".etl");
一點背景:
ETW文件是二進制的消費者數據(日誌信息),然後通過的元數據,每一個日誌信息自由獲取ETW子系統提供的。像ThreadID,邏輯處理器編號,是內核還是用戶模式,最後但最重要的是時間戳,這實際上是一個取決於處理器頻率的值。
除了上面的內容,ETW文件「rundown」,也就是它像操作系統的狀態一樣,也會在會話開始和結束時刷新到文件。儘管事實上大多數消費者認爲ETW日誌就像是簡單的日誌,但它們並不是那種類型。它們與跟蹤時間密切相關(記住ETW主要用於Windows Kernel團隊在開始時的性能分析)。最近在這方面情況有所改善,這樣文件就可以得到充分的獨立處理,並且很可能出於您的目的。
但我可以想象很多情況下追加到同一個文件是不是一個好主意。
哦,還有一個大的。 ETW文件每次從頭到尾按順序讀取。這是它會不斷增長,你不能在中間讀取它,至少不以支持的方式閱讀:-)
最後你還是不想追加,因爲想象你寫一個日誌文件foo。etl,那麼你去購買一個屁股新的處理器,並追加到這個日誌文件中,你在前一個會話中收集的所有時間戳將會被一些數字忽略。
你有沒有試過** TraceEventSessionOptions.Attach **? – magicandre1981 2014-08-27 17:38:48
我試過所有三個選項都沒有成功。 – 2014-08-28 07:40:40