2014-09-25 3 views
0

У меня возникла проблема с JSNlog и Nlog с форматированием Исключения из JSNlog. Я записываю все свои журналы ошибок как JSON, но когда я генерирую исключение из javascript, система кодирует свойство% message как JSON, а также приводит к тому, что внешний JSON недействителен.Проблема с форматированием исключений JSNlog

Моя конфигурация для файла Nlog.config для этого Appender является:

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 при любых фатальных вызовах исключения со следующим 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?

ответ

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

Смежные вопросы