c# - JObject/JToken 不登录 NLog
问题描述
我有一个类并且一些属性是动态的,当我的类传递给某个动作 API 时,该方法无法理解为 JObject,问题是登录 NLOG,当我尝试这样做时,我的属性中的日志动态显示“[]”示例如下:
myProperty:[
[[]],
[],
[]
]
当我尝试将整个班级 Objet 转换为 JObject(Newtonsoft) 时,我的所有日志都将 [] 如下所示:
{ "time": "2019-05-13 18:12:16.2224", "level": "DEBUG", "JsonProperties": { "log": [[[[[]],[[]],[[]],[[[[]],[[]],[[]]]],[[[[[[[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]]]],[[[[]],[[]],[[]],[[]],[[]],[[[[]],[[]],[[]]]],[[[[[]],[[]]],[[[]],[[]]]]],[[[[[]],[[]],[[]]],[[[]],[[]],[[]]]]],[[[[[]],[[]]],[[[]],[[]]]]]]]]]]]],[[[[[]],[[]],[[]],[[[[]],[[]],[[]],[[]]]]]]]] }, "message": "Testando performance no LoggerGenerator.", "log": [[],[]] }
我解决了这个问题,将 JObject 转换为 Dictionary 并完美地工作,问题是这样做的开销。
我需要在不创建自己的方法并转换为 Dictionary 的情况下解决这个问题
谢谢。
解决方案
JObject
是一个IEnumerable
,NLog 会尝试枚举它。
您可以执行以下操作:
logger.Info("Hello {0}", jObject); // No structured logging, becomes string.Format
logger.Info("Hello {$myobj}", jObject); // Structured logging that forces JObject.ToString
logger.Info("Hello {myobj}", jObject.ToString()); // Converts to string upfront
您还可以通过覆盖这些来自定义 NLog 如何处理特殊对象(如 JObject):
- NLog.Config.ConfigurationItemFactory.Default.ValueFormatter
- NLog.Config.ConfigurationItemFactory.Default.JsonConverter
推荐阅读
- http - 重定向到 https 的子页面
- javascript - 给定对象作为输入,无法找到对象是否存在于对象数组中
- c# - 根据项目的大小在面板上添加垂直滚动条和“换行符”
- sql - 使用 SQL 空间数据类型(STIntersect/STContains 等)返回 lat long 所在的多边形
- javascript - 如何根据用户的输入内容重定向用户?
- android - 使用 Drawable 设置 ActionBar 背景的问题
- python - 使用 Pandas 数据框按列分组值计数
- html - 设置视频标签 srcObject 时的反应问题
- javascript - React:遍历字符串数组
- laravel - 当迁移文件名在未来时,Artisan migrate 在 prod 中不起作用