4

我查看了他们的帮助页面,似乎我可以注册一个调试记录器,将信息输出到“标准 ASP.NET 调试窗口”。我的问题是我不知道这意味着什么,如果它意味着 Visual Studio 中的调试输出窗口(您可以在其中看到构建输出、调试输出等),我没有看到任何 UrlRewriter 调试输出。

规则有效(大部分)我只是想获得更多调试输出来解决问题。

我将寄存器调用添加到重写器部分,如下所示:

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

我在 Vista 上的 IIS 中本地托管这个网站,为了调试它,我将调试器附加到 w3wp 进程。

从 web.config 中选择的其他部分"

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

我应该在哪里看到 UrlRewriter.NET 的调试输出?如果它在 Visual Studio 调试输出窗口中,有什么想法为什么我在那里看不到它?

4

3 回答 3

1

尝试运行 DebugView 以读取来自 Intelligencia.UrlRewriter 的消息

从这里获取它 http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

我看到了源代码,我相信那行得通,但如果不行,那为什么不获取源代码,用你的项目编译它,然后在现场调试呢?

于 2010-03-14T08:37:00.177 回答
0

对于想要将事件消息记录到文件并在调试输出窗口中查看它们的任何人,这是我创建的一段代码。

请仅在开发环境中使用此代码,此代码未优化。

用法:
在您的 asp.net 应用程序中,添加对此库 (MyPresentationLayer.Web) 的引用。
将以下元素添加到“重写器”节点:
<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
     }
    } 
}
于 2011-06-16T11:53:20.833 回答
0

我想调试是因为我觉得我的重写规则不起作用。

过了一会儿,我发现我必须更改我的 web.config 并将以下行添加到“system.web”、“httpModules”部分:

 <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
于 2010-03-30T12:03:06.503 回答