日志分析想要一个正则
日志分析想要一个正则,自己写了一会效果达不到要求,特在这里找答案
[DEBUG][20190513 00:00:00,300][org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl:49][] 任意文本内容
正则 ()()()()()
最终分段结果
$1 DEBUG
$2 20190513 00:00:00
$3 x.x.x.x
$4 49
$5 任意文本内容
参考示例
# Default Tomcat catalina:
# 30-Oct-2017 10:04:44.671 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.15
[COMMON]
REGULAR=([d-a-zA-Z]+)s([^ ]+)s([A-Z]+)s[([^]]+)]s([^ ]+)s(.+)
#Date Time Format, now only support these formats:
# yyyy-MM-dd HH
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
不是自己写的,我用的第三方的工具,工具 https://github.com/fishjam/LogViewer 教程https://blog.csdn.net/fishjam/article/details/80861529
你好,我想通过java去分析日志,和你上面的需求一样,你还有你当时做的那个demo吗?或者给点意见也行
先按照方括号拆分数据,然后逐个处理,这样就会简单的多,想一下子解析出,就会分复杂。
需要把 日志类型,日期时间,所属架包,及输出内容抓
回复
@IT小香猪 : 这个很简单,把正则改一下就可以了: [[A-Z]+][d{8}s*d{2}:d{2}:d{2},d{3}][[w.]+:d{1,5}][[w]*] 虽然我已经知道输出的日志类型就只有debug,error,info,fatal四种,但为了防止有其它谓语所以使用了A-Z全部大写字母。
回复
@前端大师傅 : 感谢热心解答哈 最终 楼下 这个正则 解析出来了 我要的分段数据 ^[([A-Z]+)][([^[]]+)][([^:]+):(d+)][]s*(.+)$
不知道怎么回事,楼上你写的这个完全不对呀,除了都叫正则之外,和人家问的问题没什么关系吧。
还有楼主的意图也不太清楚,楼主是要把:
[DEBUG][20190513 00:00:00,300][org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl:49][]
这一段内容中的日志类型,日期时间,所属架包,及输出内容抓出来?还是只是把类型为debug的内容抓出来?
你这个明显是tomcat输出日志吧,楼主是要单抓debug还是所有的日志分类抓取出来?
这个意图在下不是很明白,还请说明。
如果只是抓取debug的话,这里就需要使用零宽后向断言,即找出[debug]但不包含
如果需要整块抓取的话则无须断言。
那这时正则也可以这样写:
这个正则也有几个地方要注意:
1.中间以点间隔的是jar包名,这里没有考虑jar名只能以_或字母开首的规定。
2.jar包后则是0-65536,我直接以0-99999为区间,这里需要你一点点的来写,用正则来写数学范围很麻烦。
3.日志内容没有考虑中文,只有a-z数字_这些ascii字符。
你这个不对啊,最起码得有这2 ([dA-Za-z])[d-:.]
/[([^]]+)]+/
^[([A-Z]+)][([^[]]+)][([^:]+):(d+)][]s*(.+)$ 正确的把我需要的数据分段了 , 唯一有点不足的就是时间 那个地方 20190513 00:00:00,300 要是在精确到 20190513 00:00:00 就非常完美
回复
@IT小香猪 : 已更新。用 (d+s+d+:d+:d+),d+ 匹配: 20190513 00:00:00 但忽略: ,300
帮你写好了Python的正则的代码了:
说明:
根据你贴出的“参考示例”,代码中的logLineNum,估计对应的是ITEM_TID,但是你此处明显只是 行号
是你自己搞错了,还是说明有误,需要你自己查证
代码中 包含2套规则,你根据自己情况选择使用
一个是命名的组
一个是 不带命名的组
如果想要把上述python的正则换成其他语言的正则,比如perl,php,java等,适当修改即可得到,我就不赘述了