【发布时间】:2021-04-01 10:22:28
【问题描述】:
我需要打印与特定模式匹配的消息的一部分。在某些情况下,消息没有那种模式;在那种情况下,我需要显示整行。例如,MESSAGE 字段中的值可以是两者中的任何一个:
案例一:2021-03-31 12:12:05.856 LOG : Message <checked [abc]>
案例2:No Message was found
流利的过滤器是:
<filter docker>
@type record_transformer
enable_ruby true
<record>
MESSAGE ${record["MESSAGE"].scan(/:\ (.*+)$/).first}
</record>
</filter>
过滤器适用于案例 1。它打印 Message <checked [abc]> 但对于案例 2 返回空,我需要它打印 No Message was found。即使条件不满足,我如何打印消息。
谢谢
【问题讨论】:
-
试试:
MESSAGE ${ v = record['MESSAGE'].scan(/:\ (.*+)$/).first; !(v.nil? || v.empty?) ? v : 'No message was found' } -
我们可以用正则表达式替换“未找到消息”,以便不依赖字符串
-
另一种选择,假设第一部分在不匹配的情况下为
nil:MESSAGE ${ record['MESSAGE'].scan(/:\ (.*+)$/).first || 'No message was found' }。我不确定正则表达式。