Разбор журналов с помощью Google Guava - PullRequest
2 голосов
/ 18 августа 2011

Я ищу способ анализа файла журнала, имеющего журнал - (с помощью 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-адрес), я хочу выбрать только те строки, где у нас есть IP-адрес между временем начала / конца, и затем произвести вывод, подобный этому

Время, DeviceName, LatencyValue - В вышеприведенном случае вывод будет

05: 13: 40, MyDevice, 999

КакДолжен ли я пойти на это.

Ответы [ 2 ]

5 голосов
/ 19 августа 2011

Посмотрите на метод CharStreams.readLines и интерфейс LineProcessor - я использовал это для потоковой обработки больших файлов с хорошими результатами.

1 голос
/ 19 августа 2011

Не думаю, что Гуава поможет вам в этом, и я лично не прочел бы файл в список строк.

Вместо этого я бы использовал регулярное выражение и запускал бы его по всему тексту, например:

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