使用Google Guava解析日志

时间:2011-08-18 16:42:26

标签: java parsing logging guava

我正在寻找以下列格式解析具有日志的日志文件的方式 - (使用Google Guava):

Sep 19 2006 13:23:40 MyDevice [latency][info] xmlfirewall (loopback-fw): tid(2809): Latency: 0 1 0 1 1 0 0 1 **999** 1 1 1 0 0 1 1 [http://<IP address>:9999/foo/test.xml]

我正在使用Google Guava阅读日志文件

List < String > lines = Files.readLines(new File("C://my.log"), Charsets.UTF_8);

我想要做的是基于用户输入(开始时间,结束时间,IP地址),我想只拾取那些在开始/结束时间之间我们有IPAddess的行然后产生这样的输出

时间,DeviceName,LatencyValue - 在上述情况下,输出将为

05:13:40,mydevice在,999

我该怎么做呢。

2 个答案:

答案 0 :(得分:5)

看一下CharStreams.readLines方法和LineProcessor界面 - 我用它来对大文件进行流分析,效果很好。

答案 1 :(得分:1)

我认为Guava不会帮助你,我个人也不会把文件读到行列表中。

相反,我会使用正则表达式并在整个文本上运行它,如下所示:

// define pattern as constant
private static final Pattern PATTERN =
Pattern.compile("^.*(?:\\d{1,3}\\.){3}\\d{1,3}.*$",Pattern.MULTILINE);

//now use the pattern in your code (inside a method):
List<String> matchingLines = Lists.newArrayList();
Matcher matcher = PATTERN.matcher(logFileContentsAsString);
while(matcher.find()){
    String line = matcher.group();
    if(performSomeAdditionalTests(line, userData))
        matchingLines.add(line);
}