Как отладить UrlRewriter.NET?
Я посмотрел на их страницу помощи, похоже, я могу зарегистрировать журнал отладки, который выводит информацию в "стандартное окно отладки 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 ответа
Попробуйте запустить DebugView для чтения сообщений от Intelligencia.UrlRewriter
Получите это здесь http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
I see the source code, and I belive thats works, but if not works, then why not get the source code, and compile it with your project and just debug it on site?
Для тех, кто хочет записывать сообщения о событиях в файл, а также видеть их в окне вывода отладки, вот фрагмент кода, который я создал.
Пожалуйста, используйте это только в среде разработки, этот код не оптимизирован.
использование:
В приложении 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
}
}
}
Я хотел отладить, потому что у меня было впечатление, что мои правила перезаписи не работают.
Через некоторое время я понял, что мне нужно изменить свой web.config и добавить следующую строку в раздел "system.web", "httpModules":
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>