如何用正则表达式在syslog-ng中排除含不可读字符的日志?
日志过滤正则表达式方案
核心思路
保留以标准日期开头的有效日志,排除包含不可读乱码的行。
正则方案
1. 匹配有效日志行(直接保留符合规则的行)
针对示例中Aug 18,etc message...这类以英文月份缩写开头的日志,可用以下正则匹配有效行:
^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2},.*
如果日志日期格式是Aug 18 12:34:56这类带时间的,调整为:
^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}.*
2. 排除乱码行(过滤含不可读字符的行)
乱码行通常包含大量非ASCII可打印字符,用以下正则匹配这类行并排除:
[^\x20-\x7E]+
其中\x20-\x7E覆盖所有ASCII可打印字符(空格到波浪号),[^...]表示匹配不在此范围内的字符。
结合规则格式的最终写法
按照你期望的规则结构,可组合为:
{not(match("[^\x20-\x7E]+")) and match("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2},.*")};
说明
not(match("[^\x20-\x7E]+")):排除任何包含不可读非打印字符的行match("^(Jan|...|Dec)\s+\d{1,2},.*"):确保只保留以合法日期开头的有效日志
内容的提问来源于stack exchange,提问作者doofyHi
相关产品推荐
相关产品推荐

