2014-09-25 73 views
0

我有问题与JSNlog和Nlog格式化异常来自JSNlog。我将所有错误日志记录为JSON,但是当我从JavaScript中抛出异常时,系统将%message属性编码为JSON,并导致外部JSON无效。问题与JSNlog异常格式化

我为这个附加目的地的Nlog.config文件配置为:

layout='{"Enviroment":"${aspnet-application:variable=Enviroment}","CreatedOn": "${longdate:universalTime=true}", "WindowsIdentity":"${aspnet-user-identity:jsonEncode=true}","Application":"${AppName}", "Level":"${level}", ${message}}' /> 

我在web.config中的JSNlog配置:

serverSideMessageFormat=""UserAgent": "%userAgent", "SessionId": "%requestId", "URL":"%url", "UserAddress": "%userHostAddress", "Message": "%message"" 

当我与此配置中运行它的工作原理对于所有正常的致命/错误/警告/信息/调试/跟踪调用,但是对于任何带有以下JSON的fatalException调用,它失败并失败:

{"Enviroment":"Dev", "CreatedOn": "2014-09-24 23:58:42.1734", "WindowsIdentity":"XXXr","Application":"LoggingTest", "Level":"Fatal", "UserAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36", "SessionId": "befn1iy4mlxqowppwepf104z", "URL":"/LoggingTest/jsnlog.logger", "UserAddress": "10.247.224.202", "Message": "{"stack":"TypeError: undefined is not a function\n at Log (http://zue-v-86a32393.vpc-am.aws.shell-cloud.com/LoggingTest/:58:16)\n at HTMLInputElement.onclick (http:/XXXX/LoggingTest/:66:141)","message":"undefined is not a function","name":"TypeError","logData":"JS Fatal Exception"}"} 

我试着删除消息周围的引号,然后对fatalException调用工作正常,但由于缺少引号而无法成为任何其他日志记录调用的有效JSON。

有谁知道如何解决这个问题或格式化fatalException调用出来的异常?

回答

1

我是JSNLog的作者。

该问题是由JSNLog中的缺陷造成的。在客户端上记录一个对象时,它会以JSON字符串的形式发送,例如{“x”:44}。请注意,这包含引号。但是当你记录一个简单的字符串时,它会作为一个简单的字符串发送,而不用周围的引号,并且字符串内的任何引号都不会被转义 - 这意味着它与JSON对象不兼容。

在日志条目是简单字符串而非JSON对象的大多数情况下,这种方法很好。但是当你想记录一个有效的JSON对象时,它不能很好地工作。

我还没有尝试过,但我假设如果您使用原始设置并在客户端上记录一个包含引号的字符串,您将得到与使用fatalException时相同的错误。

我决定通过引入一个新的属性%jsonmessage来解决这个问题,该属性引用并正确地转义字符串。然后,您将在用于使fatalException工作的配置中使用该属性。

我会随时通过评论发布此答案。

+0

我已经将%jsonmessage添加到JSNLog并发布了新版本(2.7.5)。请参阅 http://jsnlog.com/Documentation/WebConfig/JSNLog 请将%消息替换为%jsonmessage。一定不要用引号包围它(如果消息是一个字符串,JSNLog会为你做这件事)。 如果你能让我知道它现在是否适合你,那会很棒。 – user1147862 2014-09-27 08:19:11