关于.net core中NLog的日志结构化
0、最近研究serilog结构化日志,感觉这玩意主要是在代码中配置,配置文件中配置的功能比较坑爹,所以还是搞一搞nlog的结构化吧,感觉serilog不是很靠谱的样子,个人还是喜欢从配置文件中配置。可能是之前用log4net遗留下来的习惯吧。。。。。。
1、nlog.config配置文件格式
<target xsi:type="File" name="allfile" fileName="nlog-AspNetCore-all-${shortdate}.log"> <layout xsi:type="JsonLayout" includeEventProperties="false" > <attribute name="time" layout="${longdate}"/> <attribute name="level" layout="${level:upperCase=true}"/> <attribute name="message" encode="false" layout="${message}" /> </layout> </target>
2、日志结构化的语法
User user = new User() { Name = "zmy", Age = 18 }; Person person = new Person() { Name = "test", Age = 20 }; _logOpe.LogError("测试{@user}",user);
3、关于结构化的一些配置的属性信息
(1)、Attribute属性:
- name - 必需。JSON 密钥的名称
- layout - JSON 值的布局(可以是嵌套的 JsonLayout)
- encode - 为属性启用或禁用 JSON 编码。默认值 = 真
在 NLog 4.1 中引入
- escapeUnicode - 使用 \u 转义 unicode 字符(非 ascii)。默认值 = 真
在 NLog 4.4.7 中引入
- IncludeEmptyValue - 布局输出为空时包括属性。默认值 = 假
在 NLog 4.5 中引入
- EscapeForwardSlash - 是否也应该转义正斜杠。默认值 = false,
在 NLog 4.6.8 中引入。在NLog 4.7之前,它没有从父级继承值。在 NLog 5.0 之前,默认值为 true
(2)、外层layout属性
- suppressSpaces - 启用此选项可抑制输出 JSON 中的额外空格。默认情况下处于禁用状态。
在 NLog 4.1 中引入
- renderEmptyObject - 获取或设置用于呈现空对象值的选项,默认值 。
{}
true
NLog 4.3.7 中引入
- IncludeGdc - 指示是否包含 GlobalDiagnosticsContext (GDC) 字典的内容。布尔
在 NLog 4.4.10 中引入
- IncludeEventProperties - 包括日志事件的所有事件属性?默认:
false
在 NLog 5.0 选项被命名为 IncludeAllProperties 之前
- IncludeScopeProperties - 指示是否包括范围上下文属性字典。默认:
false
在 NLog 5.0 选项被命名为 IncludeMdlc 或 IncludeMdc 之前
- excludeProperties - 以逗号分隔的字符串,其中包含要排除的属性的名称。仅当包含事件属性为 时才使用。不区分大小写。默认值为空 当名称包含逗号时,请用单引号将值括起来。例如.
true
'value,withquote',value2
在 NLog 4.4 中引入
- excludeEmptyProperties - 排除值为 null 或空的事件属性(还检查 GDC、MDC、MDLC)。
NLog 4.7.7 中引入
- EscapeUnicode - 转义非 ascii 字符?布尔。默认:
true
在 NLog 4.4.7 中引入
- MaxRecursionLimit - JSON 序列化程序在退出之前应遵循对象引用多远。整数。默认值(0 = 无对象反射)
1
在 NLog 4.5 中引入。在 NLog 5.0 之前,默认值为(无对象反射)
0
- EscapeForwardSlash - 是否应该对正斜杠进行转义?如果为 true,将转换为 。默认
/
\/
false
在 NLog 4.6.8 中引入。在 NLog 5.0 之前,默认值为
true