读书人

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

发布时间: 2012-03-09 21:42:52 作者: rapoo

java来解析日志 文件有什么好的思路?
每条日志类似下面这样:
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。






[解决办法]
用正则
[解决办法]
用正则表达式吧
关于IP地址和日期都有现成的正则表达式(Google一下)可以借用
[解决办法]
bushere.com可以解决此问题。
[解决办法]

探讨

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

[解决办法]
字符串解析是需要一些功底的。
[解决办法]
探讨
正则效率好像不高。。

[解决办法]
楼主贴出来的是日志文件中的一行数据么?如果是的话就好办了,每次逐行读取文件,在截取这一行数据中的红色部分,第一个字符串就截取substring(0,9),第二个找到[,截取其后面的红色部分,第三个找到?,截取其后面的红色部分。这样就获得了每一行的这三个字符串了,可以分别存到集合里。
思路就是如此,仅供参考!
[解决办法]
通常作为日志都有自己固定的格式,按照格式直接解析日志是最好的办法.
[解决办法]
固定格式吗?
如果前面那部分是fix length 直接用substring
[解决办法]
如果格式固定的话, 还是自己分割好
比如先用- -分割,取ip
然后substring取日期
等等

[解决办法]
Java code
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);    }} 

读书人网 >J2SE开发

热点推荐