Если я выбрасываю необработанное исключение из ASP.NET, в журнал событий добавляется предупреждение (как и ожидалось).
Но если сообщение в исключении содержит%, сообщение в журнале событий искажается:
Если сообщение было
Could not find foo%20bar
журнал событий будет читать
Could not find foohttp://localhost/testpage.aspxbar
Другие числовые значения после% будут преобразованы в другие строки.
Похоже, что сообщение проходит через оператор printf где-то в пути.
Это за дизайн? Есть ли способ избежать этого (помимо обеспечения обработки исключений)?
EDIT:
Если я посмотрю на XML-представление под подробностями в журнале событий, то увижу:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="ASP.NET 2.0.50727.0" />
<EventID Qualifiers="32768">1309</EventID>
<Level>3</Level>
<Task>3</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2009-06-26T11:10:09.000Z" />
<EventRecordID>130253</EventRecordID>
<Channel>Application</Channel>
<Computer>XXX</Computer>
<Security />
</System>
<EventData>
<Data>3005</Data>
<Data>An unhandled exception has occurred.</Data>
<Data>26-06-2009 13:10:09</Data>
<Data>26-06-2009 11:10:09</Data>
<Data>525e4e8df6ec432d9a9b9b77e9ded580</Data>
<Data>6</Data>
<Data>1</Data>
<Data>0</Data>
<Data>ecd2c9a5-1-128904882075773124</Data>
<Data>Full</Data>
<Data>/WebSite1</Data>
<Data>C:\Users\XXX\Documents\Visual Studio 2008\WebSites\WebSite1\</Data>
<Data>XXX</Data>
<Data />
<Data>6404</Data>
<Data>WebDev.WebServer.EXE</Data>
<Data>XXX</Data>
<Data>Exception</Data>
<Data>Foo%20Bar</Data>
<Data>http://localhost:6594/WebSite1/Default.aspx</Data>
<Data>/WebSite1/Default.aspx</Data>
<Data>127.0.0.1</Data>
<Data>XXX</Data>
<Data>True</Data>
<Data>NTLM</Data>
<Data>XXX</Data>
<Data>4</Data>
<Data>XXX</Data>
<Data>False</Data>
<Data>at _Default.Page_Load(Object sender, EventArgs e) at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)</Data>
</EventData>
</Event>
Это выглядит хорошо. Таким образом, похоже, что проблема может быть в окне просмотра событий. Какая логика преобразует данные событий XML в форматированные данные в разделе Общие?