java来解析日志 文件有什么好的思路?

miracleliu 2012-02-04 08:55:51
每条日志类似下面这样:
10.5.12.19 - - [02/Feb/2012:13:07:10 +0800] "GET /?a=2&b=3&c=4&d=6&e=8&fi=12 HTTP/1.1" 200 151 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"

我要将里面的参数(红色部分)解析出来,存到数据库。

多个日志文件,一个文件大约500M。




...全文
877 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aotian16 2012-02-08
  • 打赏
  • 举报
回复
public class TestString {

public static void main(String[] args) {
String str = "10.5.12.19 - - [02/Feb/2012:13:07:10 +0800] \"GET /?a=2&b=3&c=4&d=6&e=8&fi=12 HTTP/1.1\" 200 151 \"-\" \"curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5\"";
String[] strArr = str.split(" ");

String ip = strArr[0];
String date = strArr[3].substring(1);
String params = strArr[6].substring(2);

System.out.println(ip);
System.out.println(date);
System.out.println(params);
}
}
aotian16 2012-02-08
  • 打赏
  • 举报
回复
如果格式固定的话, 还是自己分割好
比如先用- -分割,取ip
然后substring取日期
等等
JasonYao 2012-02-08
  • 打赏
  • 举报
回复
固定格式吗?
如果前面那部分是fix length 直接用substring
java_augur 2012-02-08
  • 打赏
  • 举报
回复
通常作为日志都有自己固定的格式,按照格式直接解析日志是最好的办法.
proorck6 2012-02-08
  • 打赏
  • 举报
回复
使用正则表达式,
用Perl 语言处理更合适。
miracleliu 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cgw1123 的回复:]

楼主贴出来的是日志文件中的一行数据么?如果是的话就好办了,每次逐行读取文件,在截取这一行数据中的红色部分,第一个字符串就截取substring(0,9),第二个找到[,截取其后面的红色部分,第三个找到?,截取其后面的红色部分。这样就获得了每一行的这三个字符串了,可以分别存到集合里。
思路就是如此,仅供参考!
[/Quote]

楼上太会偷懒了,第一个明显是ip,ip长度不一定是9个啊,

我自己写了个正则,大家帮忙检查检查
^(.+) - - .*\\[(.+) \\+0800\\] .+/aop?(.*) HTTP/1


東刀人 2012-02-07
  • 打赏
  • 举报
回复
楼主贴出来的是日志文件中的一行数据么?如果是的话就好办了,每次逐行读取文件,在截取这一行数据中的红色部分,第一个字符串就截取substring(0,9),第二个找到[,截取其后面的红色部分,第三个找到?,截取其后面的红色部分。这样就获得了每一行的这三个字符串了,可以分别存到集合里。
思路就是如此,仅供参考!
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 miraclestar 的回复:]
正则效率好像不高。。
[/Quote]
能比较正确就不错了= =~~虽然文件有点略大,希望不会死机
miracleliu 2012-02-06
  • 打赏
  • 举报
回复
正则效率好像不高。。
树成 2012-02-04
  • 打赏
  • 举报
回复
字符串解析是需要一些功底的。
jiakai0419 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 alexandertech 的回复:]

用正则表达式吧
关于IP地址和日期都有现成的正则表达式(Google一下)可以借用
[/Quote]

IP地址。

有非常好的正则吗?

我没搜到。

郁闷,我都是先正则然后分组程序判断的。

大牛,你帮我搜个好的正则呗。
sqj820123 2012-02-04
  • 打赏
  • 举报
回复
bushere.com可以解决此问题。
飞跃颠峰 2012-02-04
  • 打赏
  • 举报
回复
用正则表达式吧
关于IP地址和日期都有现成的正则表达式(Google一下)可以借用
龙四 2012-02-04
  • 打赏
  • 举报
回复
用正则

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧