日期:2014-05-20  浏览次数:20793 次

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);
    }
}