{"id":1504,"date":"2013-07-16T13:34:33","date_gmt":"2013-07-16T13:34:33","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/webdev\/2013\/07\/16\/tracing-in-asp-net-mvc-razor-views\/"},"modified":"2013-07-16T13:34:33","modified_gmt":"2013-07-16T13:34:33","slug":"tracing-in-asp-net-mvc-razor-views","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/tracing-in-asp-net-mvc-razor-views\/","title":{"rendered":"Tracing in ASP.NET MVC Razor Views"},"content":{"rendered":"<p>System.Diagnostics.Trace can be a useful tool for logging and debugging, and sometimes it would be handy to be able to call one of the tracing methods from a Razor view. <\/p>\n<p>For example, when an MVC application runs in production, by default MVC catches most application exceptions for you and routes them to Views\/Shared\/Error.cshtml. That view doesn\u2019t show error details for security reasons, so you end up with the not-very-helpful message \u201cAn error occurred while processing your request.\u201d <\/p>\n<p><img decoding=\"async\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/07\/4452.image_1FC3C00F.png\" width=\"655\" height=\"354\" \/> <\/p>\n<p>Running locally you get detailed error info, or you can catch exceptions by running in debug mode, but what to do about errors that happen in production?&#160; <\/p>\n<p>If you can re-create the error in production, you can temporarily tell the site to go ahead and display detailed error information by adding a customErrors element to your Web.config file in the system.web element:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c0bd9cd5-ea55-4623-92d0-170f80500888\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">system.web<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">customErrors<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">mode<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">Off<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">defaultRedirect<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">Error<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> \/&gt;<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>Now instead of \u201cAn error occurred\u201d you get an actual error message and a stack trace.<\/p>\n<p><img decoding=\"async\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/07\/5751.image_2D29D315.png\" width=\"655\" height=\"494\" \/> <\/p>\n<p>But another quick-and-dirty alternative that doesn\u2019t require temporarily exposing error details to the public, is to add tracing statements to the view, for example:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1b791956-5c9d-4189-aec5-70b011f4bd5f\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffff00;color:#000000\">@<\/span><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> System.Diagnostics<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;<\/li>\n<li><span style=\"background:#ffff00;color:#000000\">@model <\/span><span style=\"background:#ffffff;color:#000000\">System.Web.Mvc.<\/span><span style=\"background:#ffffff;color:#2b91af\">HandleErrorInfo<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;<\/li>\n<li><span style=\"background:#ffff00;color:#000000\">@{<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">ViewBag.Title = <\/span><span style=\"background:#ffffff;color:#a31515\">&quot;Error&quot;<\/span><span style=\"background:#ffffff;color:#000000\">;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">var<\/span><span style=\"background:#ffffff;color:#000000\"> message = <\/span><span style=\"background:#ffffff;color:#0000ff\">string<\/span><span style=\"background:#ffffff;color:#000000\">.Format(<\/span><span style=\"background:#ffffff;color:#a31515\">&quot;Error in Controller {0}, Action method {1}. Exception: {2}&quot;<\/span><span style=\"background:#ffffff;color:#000000\">, <\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">Model.ControllerName, Model.ActionName, Model.Exception.Message);<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">if<\/span><span style=\"background:#ffffff;color:#000000\"> (Model.Exception.InnerException != <\/span><span style=\"background:#ffffff;color:#0000ff\">null<\/span><span style=\"background:#ffffff;color:#000000\">)<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">message += <\/span><span style=\"background:#ffffff;color:#a31515\">&quot;; Inner exception: &quot;<\/span><span style=\"background:#ffffff;color:#000000\"> + Model.Exception.InnerException.Message;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#2b91af\">Trace<\/span><span style=\"background:#ffffff;color:#000000\">.TraceError(message);\u00a0\u00a0\u00a0\u00a0<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li>&nbsp;<\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#800000\">hgroup<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">class<\/span><span style=\"background:#ffffff;color:#0000ff\">=&quot;title&quot;&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#800000\">h1<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">class<\/span><span style=\"background:#ffffff;color:#0000ff\">=&quot;error&quot;&gt;<\/span><span style=\"background:#ffffff;color:#000000\">Error.<\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#800000\">h1<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#800000\">h2<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">class<\/span><span style=\"background:#ffffff;color:#0000ff\">=&quot;error&quot;&gt;<\/span><span style=\"background:#ffffff;color:#000000\">An error occurred while processing your request.<\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#800000\">h2<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#800000\">hgroup<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>Unfortunately, when you do this you don\u2019t get any trace output, and if you step through the code in the debugger you\u2019ll see it step right over the TraceError method call without executing it.<\/p>\n<p>Trace statements require the TRACE compiler constant, but it\u2019s on by default and you can verify that in the Build tab of the project properties window:<\/p>\n<p><img decoding=\"async\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/07\/8407.image_3F0666E2.png\" width=\"725\" height=\"282\" \/> <\/p>\n<p>The problem is that this setting in the .csproj file only applies to .cs files.&#160; ASP.NET uses a different compile process for .cshtml files (or .aspx files in Web Forms), and the settings for that compile process are in the Web.config file. If you don\u2019t explicitly specify the TRACE constant there, tracing method calls in .cshtml views are ignored. <\/p>\n<p>You have at least two options for dealing with this situation if you want to add tracing in a view: define a TRACE constant for the .cshtml compiler, or use a static helper method. <\/p>\n<p>Below is an example of what you have to add to the application Web.config file for a Visual Studio project that targets .NET 4.5, in order to define a TRACE constant for the .cshtml compiler:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6da17f39-7abb-434b-8dc9-c0c04829de8c\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">system.codedom<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">compilers<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">compiler<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\"><\/span><span style=\"background:#ffffff;color:#ff0000\">language<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">c#;cs;csharp<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\"><\/span><span style=\"background:#ffffff;color:#ff0000\">extension<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">.cs<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\"><\/span><span style=\"background:#ffffff;color:#ff0000\">type<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\"><\/span><span style=\"background:#ffffff;color:#ff0000\">compilerOptions<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">\/define:TRACE<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\"><\/span><span style=\"background:#ffffff;color:#ff0000\">warningLevel<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">1<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> \/&gt;<\/span><\/li>\n<li>\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#a31515\">compilers<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#a31515\">system.codedom<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>With this in place the TraceError method call gets executed. <\/p>\n<p>If you\u2019re using a different Visual Studio or ASP.NET version, you can get the Version number you need by looking at your root Web.config file, copying out the codedom element from there, and adding the compilerOptions setting. The root Web.config file for .NET 4 or 4.5 is located in C:WindowsMicrosoft.NETFramework64v4.0.30319Configweb.config:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:689b32f2-21a2-421b-90e9-73e9bacde3f2\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">system.codedom<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">compilers<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">compiler<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">language<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">c#;cs;csharp<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">extension<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">.cs<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">warningLevel<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">4<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">type<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">providerOption<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">name<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">CompilerVersion<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">value<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">v4.0<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">\/&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">providerOption<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">name<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">WarnAsError<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">value<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">false<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">\/&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#a31515\">compiler<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">compiler<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">language<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">vb;vbs;visualbasic;vbscript<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">extension<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">.vb<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">warningLevel<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">4<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">type<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">providerOption<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">name<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">CompilerVersion<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">value<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">v4.0<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">\/&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">providerOption<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">name<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">OptionInfer<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">value<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">true<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">\/&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#a31515\">providerOption<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">name<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">WarnAsError<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">value<\/span><span style=\"background:#ffffff;color:#0000ff\">=<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">false<\/span><span style=\"background:#ffffff;color:#000000\">&quot;<\/span><span style=\"background:#ffffff;color:#0000ff\">\/&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#a31515\">compiler<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#a31515\">compilers<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#a31515\">system.codedom<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>&#160;&#160; <\/p>\n<p>If you\u2019d rather use a static trace helper, create a class like the following example:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4eeda378-aea0-4a5d-82f9-0218b1d6ab2e\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> System.Diagnostics;<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;<\/li>\n<li><span style=\"background:#ffffff;color:#0000ff\">namespace<\/span><span style=\"background:#ffffff;color:#000000\"> MyExample<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">public<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">static<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">class<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">TraceHelper<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">public<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">static<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">void<\/span><span style=\"background:#ffffff;color:#000000\"> MyTrace(<\/span><span style=\"background:#ffffff;color:#2b91af\">TraceLevel<\/span><span style=\"background:#ffffff;color:#000000\"> level, <\/span><span style=\"background:#ffffff;color:#0000ff\">string<\/span><span style=\"background:#ffffff;color:#000000\"> message)<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">switch<\/span><span style=\"background:#ffffff;color:#000000\"> (level)<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">case<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">TraceLevel<\/span><span style=\"background:#ffffff;color:#000000\">.Error:<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#2b91af\">Trace<\/span><span style=\"background:#ffffff;color:#000000\">.TraceError(message);<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">break<\/span><span style=\"background:#ffffff;color:#000000\">;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">case<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">TraceLevel<\/span><span style=\"background:#ffffff;color:#000000\">.Warning:<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#2b91af\">Trace<\/span><span style=\"background:#ffffff;color:#000000\">.TraceWarning(message);<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">break<\/span><span style=\"background:#ffffff;color:#000000\">;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">case<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">TraceLevel<\/span><span style=\"background:#ffffff;color:#000000\">.Info:<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#2b91af\">Trace<\/span><span style=\"background:#ffffff;color:#000000\">.TraceInformation(message);<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">break<\/span><span style=\"background:#ffffff;color:#000000\">;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">case<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">TraceLevel<\/span><span style=\"background:#ffffff;color:#000000\">.Verbose:<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#2b91af\">Trace<\/span><span style=\"background:#ffffff;color:#000000\">.WriteLine(message);<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">break<\/span><span style=\"background:#ffffff;color:#000000\">;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>Now you can use virtually the same code in your view without having to add a codeDom element to your Web.config:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bbdbfa63-1fef-4026-90cc-42e95d2dfc6f\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffff00;color:#000000\">@<\/span><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> MyExample<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffff00;color:#000000\">@<\/span><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> System.Diagnostics<\/span><\/li>\n<li>&nbsp;<\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffff00;color:#000000\">@model <\/span><span style=\"background:#ffffff;color:#000000\">System.Web.Mvc.<\/span><span style=\"background:#ffffff;color:#2b91af\">HandleErrorInfo<\/span><\/li>\n<li>&nbsp;<\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffff00;color:#000000\">@{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">ViewBag.Title = <\/span><span style=\"background:#ffffff;color:#a31515\">&quot;Error&quot;<\/span><span style=\"background:#ffffff;color:#000000\">;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">var<\/span><span style=\"background:#ffffff;color:#000000\"> message = <\/span><span style=\"background:#ffffff;color:#0000ff\">string<\/span><span style=\"background:#ffffff;color:#000000\">.Format(<\/span><span style=\"background:#ffffff;color:#a31515\">&quot;Error in Controller {0}, Action method {1}. Exception: {2}&quot;<\/span><span style=\"background:#ffffff;color:#000000\">, <\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">Model.ControllerName, Model.ActionName, Model.Exception.Message);<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">if<\/span><span style=\"background:#ffffff;color:#000000\"> (Model.Exception.InnerException != <\/span><span style=\"background:#ffffff;color:#0000ff\">null<\/span><span style=\"background:#ffffff;color:#000000\">)<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">message += <\/span><span style=\"background:#ffffff;color:#a31515\">&quot;; Inner exception: &quot;<\/span><span style=\"background:#ffffff;color:#000000\"> + Model.Exception.InnerException.Message;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#2b91af\">TraceHelper<\/span><span style=\"background:#ffffff;color:#000000\">.MyTrace(<\/span><span style=\"background:#ffffff;color:#2b91af\">TraceLevel<\/span><span style=\"background:#ffffff;color:#000000\">.Error, message);<\/span><\/li>\n<li><span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;<\/li>\n<li><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#800000\">hgroup<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">class<\/span><span style=\"background:#ffffff;color:#0000ff\">=&quot;title&quot;&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#800000\">h1<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">class<\/span><span style=\"background:#ffffff;color:#0000ff\">=&quot;error&quot;&gt;<\/span><span style=\"background:#ffffff;color:#000000\">Error.<\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#800000\">h1<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;<\/span><span style=\"background:#ffffff;color:#800000\">h2<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#ff0000\">class<\/span><span style=\"background:#ffffff;color:#0000ff\">=&quot;error&quot;&gt;<\/span><span style=\"background:#ffffff;color:#000000\">An error occurred while processing your request.<\/span><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#800000\">h2<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#0000ff\">&lt;\/<\/span><span style=\"background:#ffffff;color:#800000\">hgroup<\/span><span style=\"background:#ffffff;color:#0000ff\">&gt;<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>There are many ways to get the trace output, and I\u2019ve added some links for info about that at the end of this post. <\/p>\n<p>Adding tracing to views might be an effective way to debug a problem in production, and I\u2019ve used Error.cshtml to show an example of how to do that. If your goal is a more permanent method of logging unhandled errors, a better method is to use an exception filter. To do that you create a class that implements IExceptionFilter, such as the following example:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f365a97c-fc8a-40e2-8c58-95991bfc7c72\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> System.Web.Mvc;<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;<\/li>\n<li><span style=\"background:#ffffff;color:#0000ff\">namespace<\/span><span style=\"background:#ffffff;color:#000000\"> MyExample<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">public<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">class<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">ErrorLoggerFilter<\/span><span style=\"background:#ffffff;color:#000000\"> : <\/span><span style=\"background:#ffffff;color:#2b91af\">IExceptionFilter<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">public<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">void<\/span><span style=\"background:#ffffff;color:#000000\"> OnException (<\/span><span style=\"background:#ffffff;color:#2b91af\">ExceptionContext<\/span><span style=\"background:#ffffff;color:#000000\"> context)<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">var<\/span><span style=\"background:#ffffff;color:#000000\"> message = <\/span><span style=\"background:#ffffff;color:#0000ff\">string<\/span><span style=\"background:#ffffff;color:#000000\">.Format(<\/span><span style=\"background:#ffffff;color:#a31515\">&quot;Error processing URL: {0}. Exception: {1}&quot;<\/span><span style=\"background:#ffffff;color:#000000\">, <\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">context.HttpContext.Request.Url,\u00a0\u00a0context.Exception.Message);<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">if<\/span><span style=\"background:#ffffff;color:#000000\"> (context.Exception.InnerException != <\/span><span style=\"background:#ffffff;color:#0000ff\">null<\/span><span style=\"background:#ffffff;color:#000000\">)<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">message += <\/span><span style=\"background:#ffffff;color:#a31515\">&quot;; Inner exception: &quot;<\/span><span style=\"background:#ffffff;color:#000000\"> + context.Exception.InnerException.Message;<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">context.HttpContext.Trace.Write(message);<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">System.Diagnostics.<\/span><span style=\"background:#ffffff;color:#2b91af\">Trace<\/span><span style=\"background:#ffffff;color:#000000\">.TraceError(message);\u00a0\u00a0\u00a0\u00a0<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li><span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>And then register the filter in App_Start\/FilterConfig.cs:<\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6854a292-87fb-470e-8547-6cbb5c2f175d\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 2.5em;padding: 0 0 0 5px\">\n<li><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> System.Web;<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#0000ff\">using<\/span><span style=\"background:#ffffff;color:#000000\"> System.Web.Mvc;<\/span><\/li>\n<li>&nbsp;<\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#0000ff\">namespace<\/span><span style=\"background:#ffffff;color:#000000\"> MyExample<\/span><\/li>\n<li><span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">public<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">class<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">FilterConfig<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\"><\/span><span style=\"background:#ffffff;color:#0000ff\">public<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">static<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#0000ff\">void<\/span><span style=\"background:#ffffff;color:#000000\"> RegisterGlobalFilters(<\/span><span style=\"background:#ffffff;color:#2b91af\">GlobalFilterCollection<\/span><span style=\"background:#ffffff;color:#000000\"> filters)<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">{<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">filters.Add(<\/span><span style=\"background:#ffffff;color:#0000ff\">new<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">HandleErrorAttribute<\/span><span style=\"background:#ffffff;color:#000000\">());<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">filters.Add(<\/span><span style=\"background:#ffffff;color:#0000ff\">new<\/span><span style=\"background:#ffffff;color:#000000\"> <\/span><span style=\"background:#ffffff;color:#2b91af\">ErrorLoggerFilter<\/span><span style=\"background:#ffffff;color:#000000\">());<\/span><\/li>\n<li style=\"background: #f3f3f3\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0<span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background:#ffffff;color:#000000\">}<\/span><\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p>\n<p> For another look at tracing best practices for web applications, see 47:00-55:36 in this video: <a href=\"https:\/\/vimeo.com\/68215602\"><u><font color=\"#0099ff\">Scott Guthrie: Building Real World Cloud Apps with Windows Azure &#8211; Part 2<\/font><\/u><\/a>.    <\/p>\n<p>If you deploy your application to a Windows Azure Web Site, the latest SDK makes it exceptionally easy to get trace output immediately in the Visual Studio Output window while the site is running.&#160; In two weeks the tutorial I\u2019ve written about this will be published on WindowsAzure.com; until then, see the intro in the <a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2013\/04\/30\/announcing-the-release-of-windows-azure-sdk-2-0-for-net.aspx\">ScottGu blog post introducing Windows Azure SDK 2.0.<\/a><\/p>\n<p>Some other links:<\/p>\n<ul>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms972204.aspx\"><u><font color=\"#0099ff\">ASP.NET Tracing<\/font><\/u><\/a>       <br \/>Old but still a good resource for a basic introduction to the subject. <\/li>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/4y5y10s7.aspx\"><u><font color=\"#0099ff\">Trace Listeners<\/font><\/u><\/a>       <br \/>Information about trace listeners but doesn&#8217;t mention the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.web.webpagetracelistener.aspx\"><u><font color=\"#0099ff\">WebPageTraceListener<\/font><\/u><\/a>. <\/li>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/b0ectfxd.aspx\"><u><font color=\"#0099ff\">Walkthrough: Integrating ASP.NET Tracing with System.Diagnostics Tracing<\/font><\/u><\/a>       <br \/>This too is old, but includes some additional information that the introductory articles don&#8217;t cover. <\/li>\n<li><a href=\"http:\/\/nuget.org\/packages\/elmah\/\"><u><font color=\"#0099ff\">ELMAH<\/font><\/u><\/a>       <br \/>A popular error logging utility for ASP.NET. <a href=\"http:\/\/www.hanselman.com\/blog\/NuGetPackageOfTheWeek7ELMAHErrorLoggingModulesAndHandlersWithSQLServerCompact.aspx\"><u><font color=\"#0099ff\">Scott Hanselman&#8217;s blog posts about ELMAH<\/font><\/u><\/a> are a good place to get started. <\/li>\n<li><a href=\"http:\/\/www.hanselman.com\/blog\/StreamingDiagnosticsTraceLoggingFromTheAzureCommandLinePlusGlimpse.aspx\"><u><font color=\"#0099ff\">Streaming Diagnostics Trace Logging from the Azure Command Line (plus Glimpse!)<\/font><\/u><\/a>       <br \/>How to use the command line to do what my tutorial will show how to do in Visual Studio. <a href=\"http:\/\/www.hanselman.com\/blog\/NuGetPackageOfTheWeek5DebuggingASPNETMVCApplicationsWithGlimpse.aspx\"><u><font color=\"#0099ff\">Glimpse<\/font><\/u><\/a> is a tool for debugging ASP.NET applications. <\/li>\n<\/ul>\n<p>Thanks to Rick Anderson and Yishai Galatzer for help with the code for this blog post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>System.Diagnostics.Trace can be a useful tool for logging and debugging, and sometimes it would be handy to be able to call one of the tracing methods from a Razor view. For example, when an MVC application runs in production, by default MVC catches most application exceptions for you and routes them to Views\/Shared\/Error.cshtml. That view [&hellip;]<\/p>\n","protected":false},"author":424,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[],"class_list":["post-1504","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aspnet"],"acf":[],"blog_post_summary":"<p>System.Diagnostics.Trace can be a useful tool for logging and debugging, and sometimes it would be handy to be able to call one of the tracing methods from a Razor view. For example, when an MVC application runs in production, by default MVC catches most application exceptions for you and routes them to Views\/Shared\/Error.cshtml. That view [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/1504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/424"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=1504"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/1504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=1504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=1504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=1504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}