mvc 5 трассировка
От: Duke_Nuken Украина  
Дата: 05.02.14 19:51
Оценка:
Помогите разобраться с трассировкой mvc проекта. Задача стоит так — есть сервер на котором работает mvc5 сайт и на этом сайте делаются записи в trace. Что то типа такого
public ActionResult Index()
{
   System.Diagnostics.Trace.WriteLine("It is testing trace string");
   return View();
}

и должна быть постороннее консольное приложение, которое слушает трасе только от этого сайта и выводит его в Console.WriteLine()

Тут вопросы:
1) Так вообще люди делают? Основная задумка в том чтобы запустив это консольное приложение мониторить работу сайта по этим логом, но возможно это делается как то по другому.
2) Когда пишется на сайте трасировка System.Diagnostics.Trace.WriteLine() куда эта информация вообще попадает? Это что то типа глобальных логов windows? Как их можно просматривать?
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re: mvc 5 трассировка
От: B7_Ruslan  
Дата: 05.02.14 20:00
Оценка: 4 (1)
Пример использования этого класса с msdn:

using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
       Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
       Trace.AutoFlush = true;
       Trace.Indent();
       Trace.WriteLine("Entering Main");
       Console.WriteLine("Hello World.");
       Trace.WriteLine("Exiting Main"); 
       Trace.Unindent();
    }
}


Не ленитесь и почитайте по ссылке. Там есть много топиков how-to.
Re: mvc 5 трассировка
От: B7_Ruslan  
Дата: 05.02.14 20:13
Оценка: 4 (1)
Еще можно использовать разные фильтры. Например на exception-ы:

public class TraceExceptionAttribute : FilterAttribute, IExceptionFilter
    {
        public void OnException(ExceptionContext filterContext)
        {
            var sb = new System.Text.StringBuilder();
            sb.AppendLine("<DateTime>" + DateTime.Now);
            sb.AppendLine("<Url>" + filterContext.HttpContext.Request.RawUrl);
            AddMessage(sb, filterContext.Exception);
            System.Diagnostics.Trace.TraceError(sb.ToString());
        }
        private void AddMessage(System.Text.StringBuilder sb, Exception exc)
        {
            sb.AppendLine("<Message>" + exc.Message);
            if (exc.InnerException != null)
            {
                AddMessage(sb, exc.InnerException);
            }
        }
    }
    public class TraceDbEntityValidationExceptionAttribute : FilterAttribute, IExceptionFilter
    {
        public void OnException(ExceptionContext filterContext)
        {
            if (filterContext.Exception is DbEntityValidationException)
            {
                var exc = (DbEntityValidationException)filterContext.Exception;
                var sb = new System.Text.StringBuilder();
                sb.AppendLine("<DateTime>" + DateTime.Now);
                sb.AppendLine("<Url>" + filterContext.HttpContext.Request.RawUrl);
                sb.AppendLine("<DbEntityValidationException>");
                foreach (var item in exc.EntityValidationErrors)
                {
                    sb.AppendLine("\t<DbEntityValidationResult>");
                    foreach (var err in item.ValidationErrors)
                    {
                        sb.AppendLine("\t\t<DbValidationError>");
                        sb.AppendLine("\t\t<Property>" + err.PropertyName);
                        sb.AppendLine("\t\t<ErrorMessage>" + err.ErrorMessage);
                    }
                }
                System.Diagnostics.Trace.TraceError(sb.ToString());
            }
        }
    }
Re: mvc 5 трассировка
От: B7_Ruslan  
Дата: 05.02.14 20:16
Оценка: 4 (1)
Эти фильтры можно прописать в кодовой конфигурации, что позволит не писать их по всему проекту:

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new TraceDbEntityValidationExceptionAttribute());
            filters.Add(new TraceExceptionAttribute());
            filters.Add(new HandleErrorAttribute());
            filters.Add(new CheckBrowserAttribute());
        }
    }
Re: mvc 5 трассировка
От: B7_Ruslan  
Дата: 05.02.14 20:21
Оценка:
Если у вас на сайте используется cms на базе asp.net mvc, то ваша жизнь усложняется.
Придется изучать ее документацию и исходные коды. Скорее всего там есть какие-то штатные средства.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.