- PVSM.RU - https://www.pvsm.ru -
Цель урока: Изучить Global.asax и поведение запуска веб-приложения, обработки веб-запроса. Изучение Nuget и Подключение протоколирования.
Создадим приложение ASP.NET MVC 4 Web Application «Lesson1» (рис 1.):
Не будем запускать приложение, а сразу установим (если до этого не сделали) NuGet расширение:
NuGet Package Manager – это расширение для Visual Studio, которое позволяет добавлять в существующие проекты модули, которые значительно упрощают работу. При создании «Basic» asp.net mvc4 приложения в само приложение было добавлено изначально много модулей. Их список мы можем найти, кликнув в Manage NuGet Packages… в контекстном меню проекта:
О них по порядку:
Теперь, когда мы примерно прикинули, из чего состоит наше приложение, давайте запустим его.
Для этого необходимо создать HomeController:
Для метода (действия) Index добавим View и выберем ~Views/Shared/_Layout.cshtml в качестве layout (типа master page):
Собственно, можем запускать.
Всё что мы увидим – это:
Почему контроллер надо было назвать именно Home и как это работает, мы будем изучать более подробно в следующих уроках.
А сейчас обратим внимание на файл Global.asax:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
Класс MvcApplication наследует HttpApplication и содержит инструкции для инициализации приложения. Есть еще несколько событий, на которые можно добавить код. Рассмотрим их:
Хорошо. Теперь, чтобы воочию убедимся, что всё именно так и происходит, добавим протоколирование и сделаем это через добавление NLog модуля в NuGet.
В NuGet есть консоль для выполнения команд по установкеудалениюпоиску модулей, и других вещей, типа скаффолдинга [2].
Для вывода всех установленных модулей пишем:
Get-Package
Для получения всех доступных к установке модулей:
Get-Package –ListAvailable
Для получения всех доступных модулей с названием NLog
Get-Package -ListAvailable -Filter NLog
Или
Get-Package -ListAvailable | where {$_.Id -match "NLog"} (это дольше)
Для установки модуля NLog необходимо вначале выбрать проект (если их в солюшене больше одного) и ввести команду:
Install-Package NLog
Файлы копируются в проект, добавляются ссылки на сборки и web.config может быть обновлен.
Для удаления из проекта модуля необходимо, чтобы он не был связан с другими модулями. Удаляем так:
Uninstall-Package NLog
После установки пользуемся документацией на NLog (http://nlog-project.org/wiki/Tutorial [3]) и добавляем в Web.config:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="logfile" xsi:type="File" fileName="C://file.txt" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
</nlog>
Мы ее потом исправим. Добавим в код (Global.asax.cs):
protected void Application_Start()
{
logger.Info("Application Start");
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
public void Init()
{
logger.Info("Application Init");
}
public void Dispose()
{
logger.Info("Application Dispose");
}
protected void Application_Error()
{
logger.Info("Application Error");
}
protected void Application_End()
{
logger.Info("Application End");
}
Запустим и завершим приложение (Stop). Откроем файл C://file.txt. Мы увидим, какие события происходили.
2012-09-18 19:18:11.5668|INFO|Lesson1.MvcApplication|Application Start
2012-09-18 19:18:13.7319|INFO|Lesson1.MvcApplication|Application Init
2012-09-18 19:18:14.2709|INFO|Lesson1.MvcApplication|Application Init
2012-09-18 19:18:14.2769|INFO|Lesson1.MvcApplication|Application BeginRequest
2012-09-18 19:18:14.3579|INFO|Lesson1.MvcApplication|Application AuthenticateRequest
2012-09-18 19:18:14.3579|INFO|Lesson1.MvcApplication|Application AuthorizeRequest
2012-09-18 19:18:14.3579|INFO|Lesson1.MvcApplication|Application ResolveRequestCache
2012-09-18 19:18:14.3989|INFO|Lesson1.MvcApplication|Session Start
2012-09-18 19:18:14.3989|INFO|Lesson1.MvcApplication|Application AcquireRequestState
2012-09-18 19:18:14.3989|INFO|Lesson1.MvcApplication|Application PreRequestHandlerExecute
2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application PreRequestHandlerExecute
2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application ReleaseRequestState
2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application UpdateRequestCache
2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application EndRequest
2012-09-18 19:18:15.9580|INFO|Lesson1.MvcApplication|Application PreSendRequestHeaders
2012-09-18 19:18:35.6061|INFO|Lesson1.MvcApplication|Session End
2012-09-18 19:18:38.0833|INFO|Lesson1.MvcApplication|Application Dispose
2012-09-18 19:18:38.0833|INFO|Lesson1.MvcApplication|Application End
2012-09-18 19:18:39.1383|INFO|Lesson1.MvcApplication|Application Dispose
В Application_Start выполняется регистрация:
Подробности по инициализации Filter, Вundle и Route находятся в папке App_Start.
WebActivator – это модуль, который позволяет запустить код до самого первого старта App_Start. Это может быть необходимо для того, чтобы, к примеру, создать тестовую БД перед запуском.
Установим:
Install-Package WebActivator
Добавим класс в App_Start папку:
[assembly: WebActivator.PreApplicationStartMethod(typeof(PreStartApp), "Start")]
namespace Lesson1.App_Start
{
public static class PreStartApp
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
/// <summary>
/// Метод запускается один раз перед стартом приложения
/// </summary>
public static void Start()
{
logger.Info("Application PreStart");
}
}
}
В файле логов увидим, что строка Application PreStart исполняется раньше Application Start:
2012-09-19 10:29:01.3950|INFO|Lesson1.App_Start.PreStartApp|Application PreStart
2012-09-19 10:29:01.6290|INFO|Lesson1.MvcApplication|Application Start
Создадим четыре файла отдельно для trace (трассировки), debug (отладки), info (информации), error (ошибки). Определим место записи: /Contents/logs/[текущая дата] Перепишем конфигурацию:
<nlog autoReload="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="logDirectory" value="${basedir}/Content/logs/${shortdate}" />
<targets>
<target name="fileLogTrace" xsi:type="File" fileName="${logDirectory}/trace.txt" />
<target name="fileLogDebug" xsi:type="File" fileName="${logDirectory}/debug.txt" />
<target name="fileLogInfo" xsi:type="File" fileName="${logDirectory}/info.txt" />
<target name="fileLogErrors" xsi:type="File" fileName="${logDirectory}/errors.txt" />
</targets>
<rules>
<logger name="*" level="Trace" writeTo="fileLogTrace" />
<logger name="*" level="Debug" writeTo="fileLogDebug" />
<logger name="*" level="Info" writeTo="fileLogInfo" />
<logger name="*" minlevel="Warn" writeTo="fileLogErrors" />
</rules>
</nlog>
Для NLog есть еще классная программа Log2Console, которая позволяет получать логи прямо в окне программы.
Запускаем программу и настраиваем приемщик:
В Web.config пишем:
<target name="TcpOutlet" xsi:type="NLogViewer" address="tcp4://localhost:4505"/>
Обращаю внимание, что писать надо address=”tcp4://…”, а не address=”tcp://…”
Все исходники находятся по адресу https://bitbucket.org/chernikov/lessons [4]
Автор: chernikov
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/asp-net-mvc/31653
Ссылки в тексте:
[1] http://knockoutjs.com/: http://knockoutjs.com/
[2] скаффолдинга: http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B0%D1%84%D1%84%D0%BE%D0%BB%D0%B4%D0%B8%D0%BD%D0%B3
[3] http://nlog-project.org/wiki/Tutorial: http://nlog-project.org/wiki/Tutorial
[4] https://bitbucket.org/chernikov/lessons: https://bitbucket.org/chernikov/lessons
[5] Источник: http://habrahabr.ru/post/176001/
Нажмите здесь для печати.