C# Microsoft企业库日志记录应用程序块格式不正确

C# Microsoft企业库日志记录应用程序块格式不正确,c#,enterprise-library,enterprise-library-5,C#,Enterprise Library,Enterprise Library 5,我们正在使用MS Enterprise Library 5.0登录我们的网站 当异常未处理时,我们希望将其与一段上下文信息一起记录,以帮助调试该问题。因此,我们有一个位于网站顶部的HttpModule,其任务是捕获这些事件并将它们记录到windows应用程序事件日志中。这些都是香草味的东西 它在我们的生产网络服务器上工作。它不能在我们的测试web服务器上正常工作 问题在于LogEvent.ExtendedProperties集合没有正确呈现(或者根本没有呈现)。相反,替换令牌只是逐字地转储到事件

我们正在使用MS Enterprise Library 5.0登录我们的网站

当异常未处理时,我们希望将其与一段上下文信息一起记录,以帮助调试该问题。因此,我们有一个位于网站顶部的
HttpModule
,其任务是捕获这些事件并将它们记录到windows应用程序事件日志中。这些都是香草味的东西

它在我们的生产网络服务器上工作。它不能在我们的测试web服务器上正常工作

问题在于
LogEvent.ExtendedProperties
集合没有正确呈现(或者根本没有呈现)。相反,替换令牌只是逐字地转储到事件日志中

生产事件日志显示的信息如下(略为缩写),所有内容的格式都符合您的预期:

12/10/2013 06:07:13 PM
LogName=Application
SourceName=Secure Website
EventCode=1729
EventType=2
Type=Error
ComputerName=WSSECURE09.website.nordstrom.com
TaskCategory=%1
OpCode=Info
RecordNumber=220338
Keywords=Classic
Message=Message: Unhandled exception in Secure Website: System.ServiceModel.FaultException`1[Nordstrom.Contracts.Fault.ServiceFault]:
  Argument shopper is invalid.
  Email is null or empty.
  (Fault Detail is equal to Error code: InvalidArguments).
.
.
.
Extended Properties: Shopper ID - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
其中最后一行(
ExtendedProperties:…
)转储
ExtendedProperties
集合,并提供遇到问题的购物者的ID以帮助调试它。在我们的测试环境中,扩展属性集合根本不会被转储。取而代之的是,模板中的原始标记逐字写出,不进行替换:

Extended Properties: {key} - {value}
)}
下面是正在使用的格式化程序模板,直接来自web.config文件。为了可读性,我添加了换行符,但这是唯一的变化:


下面是[稍微消毒过的]日志代码:

private static void loghandledeexception(异常ex)
{
HttpContext=HttpContext.Current;
LogEntry entry=新的LogEntry();
条目。类别。添加(“错误”);
条目。优先级=1;
entry.Severity=TraceEventType.Critical;
entry.Message=string.Format(“安全网站中未处理的异常:{0}”,例如);
entry.EventId=(int)EventId.UnhandledException;
//如果我们可以在http上下文中找到购物者id,请将其添加到日志中
购物者购物者=HttpContext.Current.Items[“购物者”]作为购物者;
if(购物者!=null)
{
bool hasShopperId=!string.IsNullOrWhiteSpace(shopper.Id);
if(hasShopperId)
{
KeyValuePair项=新的KeyValuePair(“ShopperID”,shopper.Id);
entry.ExtendedProperties.Add(项);
}
}
Logger.Write(条目);
返回;
}

我们的配置管理团队推出了自己的工具来进行配置文件转换:

该工具的解析器显然……写得不正确。嵌套的花括号似乎混淆了它。我不知道为什么它会在字符串文本中进行解析,或者为什么它会在我们的生产环境转换中正常工作,但不适用于任何其他环境的转换,但是CM团队修复了他们的工具。瞧!问题解决了

我没有想到我们的构建工具会被破坏(或者我们会推出我们自己的工具来完成这项工作),但是一旦我排除了我们的代码,排除了不同服务器上的配置差异,就没有留下太多的空间来做任何其他事情。正如福尔摩斯所说

“我有多少次对你说,当你消除了不可能的事情,不管怎样 无论多么不可能,遗骸一定是真相吗?我们知道他没有成功 门、窗户或烟囱。我们也知道他不可能被关上 藏在房间里,因为不可能藏起来。那么,他什么时候来的?”
阿瑟·柯南·道尔爵士的《四个星座中的福尔摩斯》


我们的配置管理团队推出了自己的工具来进行配置文件转换:

该工具的解析器显然……写得不正确。嵌套的花括号似乎混淆了它。我不知道为什么它会在字符串文本中进行解析,或者为什么它会在我们的生产环境转换中正常工作,但不适用于任何其他环境的转换,但是CM团队修复了他们的工具。瞧!问题解决了

我没有想到我们的构建工具会被破坏(或者我们会推出我们自己的工具来完成这项工作),但是一旦我排除了我们的代码,排除了不同服务器上的配置差异,就没有留下太多的空间来做任何其他事情。正如福尔摩斯所说

“我有多少次对你说,当你消除了不可能的事情,不管怎样 无论多么不可能,遗骸一定是真相吗?我们知道他没有成功 门、窗户或烟囱。我们也知道他不可能被关上 藏在房间里,因为不可能藏起来。那么,他什么时候来的?”
阿瑟·柯南·道尔爵士的《四个星座中的福尔摩斯》


那么在测试环境中,是不是只有ExtendedProperties标记没有翻译,还是所有的标记都没有翻译?那么在测试环境中,是不是只有ExtendedProperties标记没有翻译,还是所有的标记都没有翻译?