如何使用Sitecore修复项别名的错误日志记录?

时间:2014-01-07 12:20:58

标签: logging sitecore log4net alias sitecore6

我正在使用Sitecore 6.5。有一种多语言配置。我使用带别名的项目。

可以在内容项上创建别名。点击商品>演示>别名。 输入例如:/ page / stackoverflow / myitem。单击“确定”。

别名现在在内容树中创建,请参阅: / sitecore / system / Aliases / *

别名存储在内容树中:

- page
-- stackoverflow
--- myitem

每个项目都是创建的别名的一部分。

问题。

无效的网址(基于创建的别名)会导致错误日志中出现错误。 51161 12:01:26错误存在“/ page”的别名,但指向不存在的项目。

我想改变:

  1. 将日志级别设置为INFO/WARN
  2. 将此错误记录在单独的错误日志或
  3. 创建自定义httpRequest管道以避免此错误。
  4. 以上列表是首选订单。除非有更好的可能性来解决这个问题。是否有人遇到过这个问题并且有一个很好的解决方案?

    非常感谢。

    的Jordy

2 个答案:

答案 0 :(得分:4)

Maras是现货,但你应该能够在没有HttpProcessor的情况下实现这一点,只需“稍微”使用web.config中的log4net设置。遗憾的是,我没有时间为你完全测试这个答案,但我会指出你认为你应该看的方向。

在web.config中找到<log4net>部分。它定义了一系列“appender”,每个“appender”负责在Sitecore解决方案中创建不同的日志文件。它们看起来像这样:

<appender name="LogFileAppender" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging">
  <file value="$(dataFolder)/logs/log.{date}.txt" />
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n" />
  </layout>
</appender>

您可以创建自己的appender;例如“AliasLogFileAppender”并将其内容记录为类似<file value="$(dataFolder)/logs/Aliaslog.{date}.txt" />的内容。

一旦定义了,您需要做的就是将它连接到httpRequestPipeline中Sitecore自己的Alias Resolver的命名空间。查看appenders下方的<logger>定义。它们看起来像这样:

<logger name="Sitecore.Diagnostics.WebDAV" additivity="false">
  <level value="INFO" />
  <appender-ref ref="WebDAVLogFileAppender" />
</logger>

“name”属性实际上表示命名空间,它将触发记录器。

所以你的配置应该是这样的:

<logger name="Sitecore.Pipelines.HttpRequest.AliasResolver" additivity="false">
  <level value="INFO" />
  <appender-ref ref="AliasLogFileAppender" />
</logger>

再次,对于在发布之前无法对此进行测试表示歉意。我不明白为什么它不起作用。

我相信在log4net中有一种方法可以将某个错误消息从WARN重新映射到INFO。然而,细节在这一刻逃过了我。

答案 1 :(得分:2)

如果您想要更改为日志级别(这是最优选的选项),您需要使用 Sitecore 中的原始AliasResolver代码创建自己的AliasResolver课程,更改日志记录级别并将其注册在 Sitecore配置而不是原始AliasResolver中:

<httpRequestBegin>
  ...
  <processor type="My.Assembly.Namespace.AliasResolver, My.Assembly" />
  ...
</httpRequestBegin>
using Sitecore;
using Sitecore.Configuration;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;

namespace My.Assembly.Namespace
{
  public class AliasResolver : HttpRequestProcessor
  {
    public override void Process(HttpRequestArgs args)
    {
      Assert.ArgumentNotNull((object) args, "args");
      if (!Settings.AliasesActive)
      {
        Tracer.Warning((object) "Aliases are not active.");
      }
      else
      {
        Database database = Context.Database;
        if (database == null)
        {
          Tracer.Warning((object) "There is no context database in AliasResover.");
        }
        else
        {
          Profiler.StartOperation("Resolve alias.");
          if (database.Aliases.Exists(args.LocalPath) && !this.ProcessItem(args))
            this.ProcessExternalUrl(args);
          Profiler.EndOperation();
        }
      }
    }

    private void ProcessExternalUrl(HttpRequestArgs args)
    {
      string targetUrl = Context.Database.Aliases.GetTargetUrl(args.LocalPath);
      if (targetUrl.Length <= 0)
        return;
      this.ProcessExternalUrl(targetUrl);
    }

    private void ProcessExternalUrl(string path)
    {
      if (Context.Page.FilePath.Length > 0)
        return;
      Context.Page.FilePath = path;
    }

    private bool ProcessItem(HttpRequestArgs args)
    {
      ID targetId = Context.Database.Aliases.GetTargetID(args.LocalPath);
      if (!targetId.IsNull)
      {
        Item target = args.GetItem(targetId);
        if (target != null)
          this.ProcessItem(args, target);
        return true;
      }
      else
      {
        Tracer.Info((object) ("An alias for \"" + args.LocalPath + "\" exists, but points to a non-existing item."));
        return false;
      }
    }

    private void ProcessItem(HttpRequestArgs args, Item target)
    {
      if (Context.Item != null)
        return;
      Context.Item = target;
      Tracer.Info((object) ("Using alias for \"" + (object) args.LocalPath + "\" which points to \"" + (string) (object) target.ID + "\""));
    }
  }
}