使用JsonLayout时索引5的属性布局异常,是Bug/特性还是配置错误?
NLog ElasticSearch目标属性布局异常问题分析
先排查配置错误可能性
- Attributes语法手误:检查你配置里Attributes数组第5项,是不是不小心把
${aspnet-request-url}套进了JsonLayout标签里。比如写成了这种:
要是这样,实际生效的肯定是JsonLayout,这属于配置错误。<attribute name="requestUrl" layout="${json-layout:inner=${aspnet-request-url}}" /> - 全局/目标级布局强制包裹:看看你的NLog配置里,有没有全局设置了默认的JsonLayout,或者当前ElasticSearch目标的
layout属性直接设成了JsonLayout——这种情况下,Attributes里的单个布局渲染器可能被强制转成JsonLayout格式。
是不是特性?
NLog的ElasticSearch目标本身不会默认把${aspnet-request-url}转成JsonLayout。只要你没加自定义渲染器、特殊扩展插件,这种情况绝对不是设计特性。
会不会是Bug?
如果确定配置没问题(第5项明确写的layout="${aspnet-request-url}",没嵌套、没全局强制规则),而且其他Attributes项都正常渲染,那有可能是NLog ElasticSearch扩展的Bug。可以试试:
- 把NLog和NLog.Targets.ElasticSearch更到最新稳定版,看问题能不能解决;
- 临时把这个属性的布局改成
${aspnet-request-url:IncludeQueryString=true}(显式加个参数),测试还会不会被转成JsonLayout。
实用排查步骤
- 导出完整的NLog配置(包括自动加载的扩展配置),找有没有隐藏的布局覆盖规则;
- 简化配置,只留ElasticSearch目标和这个有问题的属性,看异常还会不会出现;
- 开NLog内部日志(设
internalLogLevel="Trace"),看布局渲染的详细过程,到底是配置解析错了还是渲染逻辑出问题。
内容的提问来源于stack exchange,提问作者Artem
相关产品推荐
相关产品推荐

