Logging 如何使用Sitecore修复项目别名的错误日志记录?
我正在使用Sitecore 6.5。有一个多语言配置。我使用带有别名的项目 可以在内容项上创建别名。单击项目>演示文稿>别名。 输入例如:/page/stackoverflow/myitem。单击“确定” 别名现在在内容树中创建,请参见:/sitecore/system/alias/* 别名在内容树中存储为:Logging 如何使用Sitecore修复项目别名的错误日志记录?,logging,sitecore,log4net,alias,sitecore6,Logging,Sitecore,Log4net,Alias,Sitecore6,我正在使用Sitecore 6.5。有一个多语言配置。我使用带有别名的项目 可以在内容项上创建别名。单击项目>演示文稿>别名。 输入例如:/page/stackoverflow/myitem。单击“确定” 别名现在在内容树中创建,请参见:/sitecore/system/alias/* 别名在内容树中存储为: - page -- stackoverflow --- myitem 每个项目都是所创建别名的一部分 问题 网站网址: 有效别名url: 无效的别名url:或 无效URL(基于创建的
- page
-- stackoverflow
--- myitem
每个项目都是所创建别名的一部分
问题
- 网站网址:
- 有效别名url:
- 无效的别名url:或
INFO/WARN
或httpRequest
管道以避免此错误Jordy如果要更改为日志级别(这是最可取的选项),则需要使用原始的
别名解析程序
从Sitecore创建自己的别名解析程序
类,更改日志记录级别并将其注册到Sitecore配置中,而不是原始的别名解析程序中
:
...
...
使用Sitecore;
使用Sitecore.Configuration;
使用Sitecore.Data;
使用Sitecore.Data.Items;
使用Sitecore.Diagnostics;
命名空间My.Assembly.namespace
{
公共类别名解析程序:HttpRequestProcessor
{
公共覆盖无效进程(HttpRequestArgs args)
{
Assert.ArgumentNotNull((object)args,“args”);
如果(!Settings.AliasesActive)
{
Tracer.Warning((对象)“别名未激活”);
}
其他的
{
Database=Context.Database;
if(数据库==null)
{
Tracer.Warning((object)“AliasResover中没有上下文数据库。”);
}
其他的
{
探查器。开始操作(“解析别名”);
if(database.alias.Exists(args.LocalPath)&&&!this.ProcessItem(args))
this.ProcessExternalUrl(args);
剖析器内操作();
}
}
}
私有void ProcessExternalUrl(HttpRequestArgs args)
{
字符串targetUrl=Context.Database.alias.GetTargetUrl(args.LocalPath);
如果(targetUrl.Length 0)
返回;
Context.Page.FilePath=路径;
}
私有bool ProcessItem(HttpRequestArgs args)
{
ID targetId=Context.Database.alias.GetTargetID(args.LocalPath);
如果(!targetId.IsNull)
{
项目目标=args.GetItem(targetId);
如果(目标!=null)
this.ProcessItem(args,target);
返回true;
}
其他的
{
Tracer.Info((对象)(\“”+args.LocalPath+“\”的别名存在,但指向不存在的项。“);
返回false;
}
}
私有void ProcessItem(HttpRequestArgs参数,项目标)
{
if(Context.Item!=null)
返回;
项目=目标;
Tracer.Info((对象)(“使用指向\”“+(字符串)(对象)target.ID+“\”)的\”“+(对象)args.LocalPath+“\”的别名);
}
}
}
Maras非常合适,但是您应该能够在不使用HttpProcessor的情况下通过“只”在web.config中稍微修改log4net设置来实现这一点。不幸的是,我没有时间为您全面测试这个答案,但我会为您指出我认为您应该寻找的方向
在web.config中找到
部分。它定义了一系列“附加器”,每个附加器负责在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>
<logger name="Sitecore.Diagnostics.WebDAV" additivity="false">
<level value="INFO" />
<appender-ref ref="WebDAVLogFileAppender" />
</logger>
您可以创建自己的appender;e、 g.“AliasLogFileAppender”,并让它将其内容记录到类似
的地方
定义好后,只需将其连接到httpRequestPipeline中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>
<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中有一种方法可以将某个错误消息从警告重新映射到信息。然而,此时此刻我对细节一无所知。我发现本系列教程非常有助于理解所有log4net选项:哇。这是我喜欢的方式。我发现有可能编写一个匹配规则,请参阅。但是我不知道怎么写正则表达式。有人知道我必须如何为errormessage编写正则表达式吗(见第一篇文章)?可能有,但你不需要使用我在这里列出的解决方案。由于您只从Sitecore.Pipelines.HttpRequest.AliasResolver命名空间捕获日志消息,因此您可以非常确信,在此日志文件中将获得的是您要查找的条目。除非我遗漏了什么?谢谢你的解决方案。不错,但不是我要找的那个。因为当我从Sitecore v6.5更新到Sitecore v6.6或更高版本时会发生什么?我更喜欢使用带有过滤功能的log4net解决方案,将别名错误记录到另一个日志文件或类似文件中。