日志分析想要一个正则,自己写了一会效果达不到要求,特在这里找答案
[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🇲🇲ss.SSS
# yyyy-MM-dd HH🇲🇲ss
# HH🇲🇲ss.SSS
# HH🇲🇲ss
TIME_FORMAT=HH🇲🇲ss.SSS
[REGMAP]
ITEM_TIME=$2
ITEM_LEVEL=$3
ITEM_PID=
ITEM_TID=$4
ITEM_MODULE=$5
ITEM_FUN=
ITEM_LOG=$6
帮你写好了Python的正则的代码了:
说明:
根据你贴出的“参考示例”,代码中的logLineNum,估计对应的是ITEM_TID,但是你此处明显只是 行号
是你自己搞错了,还是说明有误,需要你自己查证
代码中 包含2套规则,你根据自己情况选择使用
一个是命名的组
一个是 不带命名的组
如果想要把上述python的正则换成其他语言的正则,比如perl,php,java等,适当修改即可得到,我就不赘述了
/\[([^\]]+)\]+/
不知道怎么回事,楼上你写的这个完全不对呀,除了都叫正则之外,和人家问的问题没什么关系吧。
还有楼主的意图也不太清楚,楼主是要把:
[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字符。
先按照方括号拆分数据,然后逐个处理,这样就会简单的多,想一下子解析出,就会分复杂。
你好,我想通过java去分析日志,和你上面的需求一样,你还有你当时做的那个demo吗?或者给点意见也行