Как отладить UrlRewriter.NET? - PullRequest
       20

Как отладить UrlRewriter.NET?

4 голосов
/ 12 марта 2010

Я посмотрел на их страницу справки, похоже, я могу зарегистрировать журнал отладки, который выводит информацию в «стандартное окно отладки ASP.NET». Моя проблема в том, что я не знаю, что это значит, если это означает окно вывода отладки в Visual Studio (где вы видите выходные данные сборки, отладочные данные и многое другое), я не вижу никаких отладочных выходов UrlRewriter.

Правила работают (в основном). Я просто хочу получить больше отладочной информации для устранения проблем.

Я добавил регистрационный вызов в раздел переписывания так:

<rewriter>
    <register logger="Intelligencia.UrlRewriter.Logging.DebugLogger, Intelligencia.UrlRewriter" />
    ....
</rewriter>

Я размещаю этот сайт локально в IIS на Vista, для отладки я присоединяю отладчик к процессу w3wp.

Другие выбранные части из web.config "

<compilation debug="true">
    <assemblies>
        ...
    </assemblies>
</compilation>
<trace enabled="true"/>

Где я должен увидеть отладочный вывод из UrlRewriter.NET? Если оно находится в окне вывода отладочной информации Visual Studio, есть идеи, почему я его там не вижу?

Ответы [ 3 ]

1 голос
/ 14 марта 2010

Попробуйте запустить DebugView для чтения сообщений от Intelligencia.UrlRewriter

Получи это отсюда http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

Я вижу исходный код и считаю, что это работает, но если не работает, то почему бы не получить исходный код, скомпилировать его с вашим проектом и просто отладить его на сайте?

0 голосов
/ 16 июня 2011

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

Пожалуйста, используйте это только в среде разработки, этот код не оптимизирован.

использование:
В приложении asp.net добавьте ссылку на эту библиотеку (MyPresentationLayer.Web).
Добавьте следующий элемент в узел rewriter:
<register logger="IntelligenciaExt.Web.Logging.UrlRewriterIntelligencia.FileLogger, IntelligenciaExt.Web"/>
По умолчанию файл журнала находится за пределами вашей папки «www», в подпапке «intelenciaLog».

using System; 
using SysDiag = System.Diagnostics; 
using System.IO;

using Intelligencia.UrlRewriter.Logging;

namespace MyPresentationLayer.Web.Logging.UrlRewriterIntelligencia
{
    /// <summary>
    /// Custom logger for Intelligencia UrlRewriter.net that logs messages
    /// to a plain text file (../intelligenciaLog/log.txt).
    /// </summary>
    public class FileLogger : IRewriteLogger
    {
     private const string _logFolderName = "../intelligenciaLog";
     private const string _logFileName = "log.txt";
     private const string _appName = "UrlRewriterIntelligencia.FileLogger";

     public FileLogger()
     {
         LogToFile(Level.Info, "Created new instance of class 'FileLogger'");
     }

     public void Debug(object message)
     {
         LogToFile(Level.Debug, (string)message);
     }

     public void Error(object message, Exception exception)
     {
         string errorMessage = String.Format("{0} ({1})", message, exception);
         LogToFile(Level.Error, errorMessage);
     }

     public void Error(object message)
     {
         LogToFile(Level.Error, (string)message);
     }

     public void Fatal(object message, Exception exception)
     {
         string fatalMessage = String.Format("{0} ({1})", message, exception);
         LogToFile(Level.Fatal, fatalMessage);
     }

     public void Info(object message)
     {
         LogToFile(Level.Info, (string)message);
     }

     public void Warn(object message)
     {
         LogToFile(Level.Warn, (string)message);
     }

     private static void LogToFile(Level level, string message)
     {
         string outputMessage = String.Format("[{0} {1} {2}] {3}", DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
               _appName.PadRight(50, ' '), level.ToString().PadRight(5, ' '),
               message);
         SysDiag.Debug.WriteLine(outputMessage);
         try
         {
             string pathToLogFolder =Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _logFolderName);
             if (!Directory.Exists(pathToLogFolder))
             {
                 Directory.CreateDirectory(pathToLogFolder);
             }

             string fullPathToLogFile = Path.Combine(pathToLogFolder, _logFileName);
             using (StreamWriter w = File.AppendText(fullPathToLogFile))
             {
                 w.WriteLine(outputMessage);
                 // Update the underlying file.
                 w.Flush(); // Close the writer and underlying file.
                 w.Close();
             }
         }
         catch (Exception) { }
     }

     internal enum Level
     {
         Warn,
         Fatal,
         Info,
         Error,
         Debug
     }
    } 
}
0 голосов
/ 30 марта 2010

Я хотел отладить, потому что у меня было впечатление, что мои правила перезаписи не работают.

Через некоторое время я понял, что мне нужно изменить свой web.config и добавить следующую строку в раздел 'system.web', 'httpModules':

 <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
...