2014-09-25 65 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