2010-03-12 5 views
4

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

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

Я добавил вызов регистра в раздел ReWriter так:

<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 отладки, любые идеи, почему я не вижу он там?

+0

@vfilby возможно, если вы не можете заставить его работать, было бы проще реализовать пользовательский регистратор и записать его в файл. http://urlrewriter.net/index.php/support/reference/loggers/custom-logger –

+0

Так каково было ваше решение? –

+0

Чтобы не использовать UrlRewriter.NET, isntead использует правильный фильтр перезаписи ISAPI. IIRF является бесплатным, и каротаж работает надежно. – vfilby

ответ

1

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

Получить его здесь http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

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

+0

Я решил проблему уже, но это выглядит как отличный инструмент. – vfilby

+0

да, это!, Попробуйте использовать Debug.write() ... на вашем коде! чтобы многие думали о времени выполнения. – Aristos

0

Я хотел отлаживать, потому что у меня создалось впечатление, что мои правила перезаписи не функционировали.

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

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

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

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

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

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 
    } 
    } 
}