我正在寻找以下列格式解析具有日志的日志文件的方式 - (使用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
我该怎么做呢。
答案 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);
}