Подтвердить что ты не робот

Проблемы с трассировкой ASP.NET MVC

Вопрос

Как получить информацию трассировки ASP.NET MVC, чтобы она была последовательной для вывода на трассе в виде trace.axd? Я могу просто пропустить что-то очевидное, пожалуйста, позвоните, если вы это увидите.

Фоновая информация для традиционного ASP.NET

Итак, вернемся к обычным дням ASP.NET, вы можете просто добавить следующее к вашему web.config:

<system.diagnostics>
    <trace>
        <listeners>
            <add name="WebPageTraceListener" type="System.Web.WebPageTraceListener, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </listeners>
    </trace>
</system.diagnostics>
...
<system.web>
    <trace enabled="true" pageOutput="true" writeToDiagnosticsTrace="true"/>
...
<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="1" compilerOptions="/d:TRACE" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

Затем вы можете добавить на свои страницы следующее:

HttpContext.Current.Trace.Write("Write Trace Here");
or
System.Diagnostics.Trace.Write("Write Trace Here");

И если вы нажмете на свою страницу (то есть localhost: 61115/Default.aspx), вы получите красивую таблицу трассировки со своим специальным трассированием, встроенным в события страницы asp.net:

aspx.page Begin Load 0.00343 0.000357
test 0.00462176 0.001192 
aspx.page End Load 0.00526904 0.000018 

Запуск localhost: 61115/Trace.axd? id = 0 сохранит те же результаты трассировки, что и выходы трассировки на странице.

Фоновая информация о ASP.NET MVC

К сожалению, я не могу заставить это работать в ASP.NET MVC 2.0 по неизвестным мне причинам. Я использую аналогичные настройки web.config как перечисленные выше. Что интересно, так это то, что я могу только получить следы, чтобы частично работать. Поэтому, если я попал на эквивалентную по умолчанию страницу по умолчанию (также как метод действия индекса моего homecontroller), я вижу все традиционные события страницы asp.net, такие как preinit, preload, prerender и т.д., Но не пользовательский трафик msg с использованием System.Diagnostics и HttpContext.Trace.Write.

Однако, если я вернусь к файлу Trace.axd? id = 0, меня приветствуют мои пользовательские сообщения трассировки, но нет трассировки трассировки страницы ASP.NET. Я должен упустить что-то здесь, что вызывает эту несогласованность в информации о трассировке, которую я вижу на странице или в файле trace.axd(напомним, что традиционный asp.net выводит идентичные выходные данные на странице и trace.axd). Мне бы очень хотелось, чтобы моя информация о трассировке на странице соответствовала trace.axd(либо путем удаления традиционных событий страницы asp.net, либо других средств). Есть что-то, чего я не хватает?

4b9b3361

Ответ 1

Цитирование непосредственно из книги "MVC 2 в действии":

Когда вы вызывали Trace.Write() в Web Формы, вы взаимодействовали с Trace - класс контекста. Это существует на ваш ViewPage в ASP.NET MVC, но это isnt, где вы хотели бы написать отслеживание заявлений. К тому времени, когда вы передал эстафету на вид, нет логики там, что вам нужно проследить. Вместо этого вам нужно отслеживать логика, встроенная в вашу контроллеры. Вы можете попытаться использовать класс TraceContext в вашем контроллер, но эти утверждения не будут когда-либо попадают в список сообщений в журнале трассировки (на вашем или Trace.axd). Вместо этого вы может использовать System.Diagnostics.Trace и создайте собственные TraceListeners для проверять активность в вашем контроллеры. Кроме того, вы можете использовать более зрелый журнал такие как log4net или NLog:

Отладка приложений ASP.NET MVC как и любой .NET. выражение. Трассировка, однако, не предлагайте столько же для MVC. Вместо этого вы может опираться на встроенный TraceListeners в .NET или использовать хорошая библиотека регистрации, такая как упомянутый ранее. Другой аспект регистрация ошибок - мониторинг работоспособности.

Извините, что не отвечал на мои собственные слова, но я думаю, что это объяснение можно найти на:)

Ответ 2

Собственно, теперь это можно сделать. Используя glimpse, вы можете вернуться и использовать Trace.Write в MVC.

http://getglimpse.com/

Только для ASP.NET MVC 3.0 и выше

Ответ 3

Вместо использования HttpContext.Current.Trace или System.Diagnostics.Trace попробуйте использовать Controller.HttpContext.Trace?

Ответ 4

Цитата не применяется к трассировке в фильтрах и действиях. Даже тогда он не применяется, поскольку вы можете получить вывод трассировки из OnResultExecuting. Это только OnResultExecuted, где слишком поздно, чтобы получить вывод трассировки.

Мне удалось получить интегрированный вывод трассировки для работы в IIS 7.5, выполнив мое приложение MVC 3 в Cassini - затем интегрированная трассировка начала работать в IIS 7.5.

Я изучаю некоторые аномалии трассировки в MVC

Ответ 5

Вы можете попытаться использовать Html.Action, чтобы заставить контроллер выполнить трассировку для вас. Например, если вам нужно отследить ошибку из представления ошибки по умолчанию, вы можете использовать

Html.Action("TraceError", "Error", new { ControllerName = Model.ControllerName, ActionName = Model.ActionName, Exception = Model.Exception })

Затем внутри вашего контроллера ошибок реализуем метод

public ActionResult TraceError(String ControllerName, String ActionName, Exception Exception)
{
    System.Diagnostics.Trace.TraceError("Error Message: {0}", Exception.Message);
    // Other tracing statements
}