我與DefaultTraceListener
問題(這是唯一的跟蹤偵聽器,如果沒有的app.config覆蓋)時,如果AssertUiEnabled
是false
(即ASP.NET)寫入異常在失敗的斷言(調用Trace.Assert(false)
),上的消息爲OutputDebugString
,但繼續執行。一個TraceListener的,它拋出一個失敗的斷言
所以我使用下面的TraceListener
的子類,它會拋出異常。我激活它使用
TraceListenerWhichThrowsExceptionOnFail.InsertAsFirstTraceListener(Trace.Listeners);
在Application_Init
。
現在,在Application_Error
事件中,我可以使用完整堆棧跟蹤記錄異常(如任何異常),包括調用Trace.Assert(false)
。
public class TraceListenerWhichThrowsExceptionOnFail : TraceListener
{
public static void InsertAsFirstTraceListener(TraceListenerCollection traceListeners)
{
traceListeners.Insert(0, new TraceListenerWhichThrowsExceptionOnFail());
}
public override void Fail(string message, string detailMessage)
{
message = string.IsNullOrEmpty(detailMessage) ? message : message + ", Detail message: " + detailMessage;
throw new ApplicationException("Trace assertion failed" +
(string.IsNullOrEmpty(message) ? "" : ": " + message) + ".");
}
public override void Write(string message)
{
// NOP
}
public override void WriteLine(string message)
{
// NOP
}
}
現在我的問題:有沒有人看到這種方法的問題?
貌似問題更適合代碼審查網站 – 2013-02-28 22:34:10