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可以解决此问题。
[解决办法]
[解决办法]
字符串解析是需要一些功底的。
[解决办法]
[解决办法]
楼主贴出来的是日志文件中的一行数据么?如果是的话就好办了,每次逐行读取文件,在截取这一行数据中的红色部分,第一个字符串就截取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); }}