Javascript JSNlog异常格式化问题

Javascript JSNlog异常格式化问题,javascript,c#,json,nlog,jsnlog,Javascript,C#,Json,Nlog,Jsnlog,我对JSNlog和Nlog有一个问题,JSNlog有格式异常。我将所有错误日志都写为JSON,但当我从javascript抛出异常时,系统将%message属性编码为JSON,这也导致外部JSON无效 我对这个appender的Nlog.config文件的配置是: layout='{"Enviroment":"${aspnet-application:variable=Enviroment}","CreatedOn": "${longdate:universalTime=true}", "Win

我对JSNlog和Nlog有一个问题,JSNlog有格式异常。我将所有错误日志都写为JSON,但当我从javascript抛出异常时,系统将%message属性编码为JSON,这也导致外部JSON无效

我对这个appender的Nlog.config文件的配置是:

layout='{"Enviroment":"${aspnet-application:variable=Enviroment}","CreatedOn": "${longdate:universalTime=true}", "WindowsIdentity":"${aspnet-user-identity:jsonEncode=true}","Application":"${AppName}", "Level":"${level}", ${message}}' />
我对JSNlog的web.config的配置是:

serverSideMessageFormat=""UserAgent": "%userAgent", "SessionId": "%requestId", "URL":"%url", "UserAddress": "%userHostAddress", "Message": "%message""
当我使用此配置运行时,它适用于所有正常的致命/错误/警告/信息/调试/跟踪调用,但在使用以下JSON的任何fatalException调用上,它会失败,JSON无效:

{"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调用产生的异常吗?

我是JSNLog的作者

该问题是由JSNLog中的一个缺陷引起的。在客户机上记录对象时,它将作为JSON字符串发送,例如{“x”:44}。请注意,其中包含引号。但是,当您记录一个简单字符串时,它将作为一个简单字符串发送,没有周围的引号,并且字符串中的任何引号都不会转义,这意味着它与JSON对象不兼容

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

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

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


我将通过对此答案的评论向您发布消息。

我现在已将%jsonmessage添加到JSNLog并发布了新版本(2.7.5)。请参阅请将%message替换为%jsonmessage。确保不要用引号括起来(如果消息是字符串,JSNLog将为您这样做)。如果你能让我知道它现在是否适合你,那就太好了。