代码之家  ›  专栏  ›  技术社区  ›  vfilby

如何调试urlrewriter.net?

  •  4
  • vfilby  · 技术社区  · 15 年前

    我查看了他们的帮助页面,似乎可以注册一个调试记录器,将信息输出到“标准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调试输出窗口中,我为什么看不到它呢?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Aristos    15 年前

    尝试运行debugview以读取来自intelligencia.urlrewriter的消息

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

    我看到了源代码,我相信这是可行的,但是如果不可行,那为什么不获取源代码,并用您的项目编译它,然后在站点上调试它呢?

        2
  •  0
  •   mathijsuitmegen    15 年前

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

    过了一会儿,我发现我必须修改web.config,并在“system.web”、“httpmodules”部分添加以下行:

     <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
    
        3
  •  0
  •   mathijsuitmegen    14 年前

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

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

    用法:
    在ASP.NET应用程序中,添加对此库的引用(myPresentationLayer.web)。
    将以下元素添加到“rewriter”节点:
    <register logger="IntelligenciaExt.Web.Logging.UrlRewriterIntelligencia.FileLogger, IntelligenciaExt.Web"/>
    默认情况下,日志文件可以在“www”文件夹外的子文件夹“intellicialog”中找到。

    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
         }
        } 
    }
    
    推荐文章