我试图找出一个(multiline.pattern)或两个(multiline.pattern 和 excex_line)正则表达式,以便将日志信息从 filebeat 发送到logstash。 写入日志的系统具有标准化的日志格式,如下所示
[2019-08-28 10:38:57 +0200][0000000000][Info][User][OLS][201][Some Logging Information]
为了匹配这一点,我构建了正则表达式(也许这还需要一些改进:-))
^\[(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s\+(\d{4})\]\[\d{10}\]\[[^\]]*\]\[[^\]]*\]\[[^\]]*\]\[[\d]*\]\[[^\]]*\]$
不幸的是,当系统在 Debug模式下运行时,日志结构会发生变化
[2019-05-24 09:58:39 +0200][0000000000][Debug][External][RESTLM][HTDOC_REQUEST][Some Debug Loginformation]
[2019-05-24 09:58:39 +0200][0000000000][Debug][External][RESTLM[HTDOC_REQUEST][Some Debug Loginformation]
[2019-05-24 09:58:34 +0200][0000000026][Debug][External][RESTLM][REST_RESPONSE][[45][HTTP/1.0 201 Created
Server: Test/2019.3
Pragma: no-cache
Cache-control: no-cache
Content-Type: text/xml
Content-Length: 255
<?xml version="1.0" encoding="utf-8"?>
<Status><Repository><Path>D:/repository/tabfiles</Path><Version>4_0</Version><Fingerprint>p12uqocQM0gtaRieBldCix/CSSs=</Fingerprint></Repository><System>Running</System></Status>]]
[2019-05-24 09:58:34 +0200][0000000000][Debug][External][RESTLM][REST_REQUEST][[45][POST / HTTP/1.1
Content-Type: text/xml; charset=utf-8
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/11.0.2
Host: serverxyz:24821
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 10
<Status />]]
我想排除那些在第三个字段中包含“调试”的日志条目(多行)。 从我的角度来看,正常日志和调试日志之间的主要区别在于第 6 个字段不是 [\d*]。 在某些情况下,我认为这是我的问题,Loginformation(最后一个日志字段)内有一个日志 - 看起来像 [[[45][some text][other text]]
我正在寻找的是一个正则表达式,它匹配一个独立于调试或正常的完整日志条目。 或者两种表达方式 正常日志的第一个匹配 第二场比赛调试日志(并排除它们)
最佳答案
您的某些组是可选的,不确定是哪些组,但可以从以下表达式开始:
^\[(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s\+(\d{4})\]\[\d{10}\](\[[^\]]*\])?\[[^\]]*\]\[[^\]]*\]\[[^\]]*\]\[[^\]]*\](\[[\s\S]*?\])?$
Demo 1
或者也许,
^\[(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s\+(\d{4})\]\[(\d{10})\](\[([^\]]*)\])?\[([^\]]*)\]\[([^\]]*)\]\[([^\]]*)\]\[([^\]]*)\](\[([\s\S]*?)\])?$
Demo 2
如果您可能想捕获括号中的这些数据。
<小时/>如果您想简化/修改/探索表达式,regex101.com 的右上角面板已对此进行了解释。 。如果您愿意,也可以在 this link 观看,它如何与一些示例输入相匹配。
<小时/>关于RegExp 匹配所有直到两个连续的特殊字符 (]]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57985560/