如何解决Serilog FilterExpression检查LogEvent的所有字符串属性是否都满足长度限制?
在我的appsettings.json
中,我想过滤Serilog日志事件以仅包括所有具有字符串值的标量属性都满足一定长度约束的日志事件。在C#方法中,谓词为
logEvent => logEvent.Properties.Values
.OfType<ScalarValue>()
.Select(x => x.Value)
.OfType<string>()
.All(x => x.Length <= 128);
在json方法中,基于文档, 我认为可能存在带有正则表达式的黑客,例如
Contains(@Properties[*],/^.{0,128}$/)
或者也许
Length(@Properties[*]) <= 128
但显然这些都不起作用
有什么想法如何检查字符串属性是否低于长度限制?
解决方法
上述过滤器表达式不起作用,因为Serilog过滤器表达式编译器对Properties
有特殊处理:在内部过滤器表达式编译管道中的某个时刻,Properties['somekey']
被somekey
取代。
这是合乎逻辑的,因为实际上Properties['somekey']
实际上是对名为somekey
的属性的访问。通配符?
和*
不受此规则的限制。
这就解释了为什么问题中的示例确实在内部编译为某种Func<FilterExpression,object>
却无法产生我期望的结果的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。