package com.kspichale.strom_demo; import java.io.Serializable; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LogfileParser implements Serializable { public static final String LOGFILE_FORMAT = "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\""; public static final String DATE_FORMAT = "dd/MMM/yyyy:HH:mm:ss Z"; public static final int NUM_FIELDS = 9; private final Pattern pattern; public LogfileParser() { super(); this.pattern = Pattern.compile(LOGFILE_FORMAT); } public LoggingValues parseLine(final String line) { final Matcher matcher = pattern.matcher(line); if (!matcher.matches() || NUM_FIELDS != matcher.groupCount()) { System.err.println("Bad log entry (or problem with RE?):"); System.err.println(line); return null; } System.out.println("IP Address: " + matcher.group(1)); System.out.println("Date&Time: " + matcher.group(4)); System.out.println("Request: " + matcher.group(5)); System.out.println("Response: " + matcher.group(6)); System.out.println("Bytes Sent: " + matcher.group(7)); if (!matcher.group(8).equals("-")) System.out.println("Referer: " + matcher.group(8)); System.out.println("Browser: " + matcher.group(9)); final String dateTime = matcher.group(4); final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); Date parsedDate; try { parsedDate = sdf.parse(dateTime); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } final String request = matcher.group(5); StringTokenizer st = new StringTokenizer(request); st.nextToken(); final String url = st.nextToken(); System.out.println(url); return new LoggingValues(parsedDate, url); } }