【发布时间】:2013-10-14 22:17:03
【问题描述】:
如何使用正则表达式从系统日志消息中提取程序名?我有一个 Java 流处理模块,它接受正则表达式来处理 syslog 消息。
日志行可能是:
2013-10-14T22:05:29+00:00 hostname sshd[6359]: Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd:3322 Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd/6359 Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname SSHD[1133] Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname SSH.D[6359]: Connection closed by 192.168.1.10
字符串提取过程应该是:取第三个以空格分隔的子字符串,提取以[、:、/或空格结尾的子字符串
所以在前四个日志样本中,提取的字符串将是sshd、第五个SSHD 和第六个SSH.D。这可以通过正则表达式实现吗?
编辑:
我尝试的是((?:[A-Za-z][A-Za-z0-9_.-]+)),它似乎可以工作,但老实说,我修改了一个示例正则表达式并使用在线工具对其进行调整,直到它适合我的用例,但我不确定它是如何工作的。
【问题讨论】:
-
是的。这是可能的。你试过什么?
-
我尝试的是“((?:[A-Za-z][A-Za-z0-9_.-]+))”,它似乎有效,但老实说,我修改了一个示例正则表达式并使用在线工具对其进行调整,直到它适合我的用例,但我不确定它是如何工作的。
标签: java regex hadoop syslog flume