// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String LEVEL = "logLevel";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String LOGGER = "logLogger";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String METHOD = "logMethod";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String MSG = "logMsg";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String THREAD_NAME = "threadName";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String TIMESTAMP = "logTimestamp";


import static com.github.davidmoten.logan.Field.LEVEL;
import static com.github.davidmoten.logan.Field.LOGGER;
import static com.github.davidmoten.logan.Field.METHOD;
import static com.github.davidmoten.logan.Field.MSG;
import static com.github.davidmoten.logan.Field.THREAD_NAME;
import static com.github.davidmoten.logan.Field.TIMESTAMP;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import com.google.common.collect.BiMap;
import com.google.common.collect.Maps;
    private Long parseTime(String timestamp) {
        Long time;
        for (SimpleDateFormat df : options.getTimestampFormat())
            try {
                StringBuilder s = new StringBuilder(timestamp);
                s.append(" ");
                s.append(options.getTimezone());
                time = df.parse(s.toString()).getTime();

                if (!df.toPattern().contains("yy")) {
                    // set year to most recent possible
                    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(options.getTimezone()));
                    int year = cal.get(Calendar.YEAR);
                    cal.setTimeInMillis(time);
                    cal.set(Calendar.YEAR, year);
                    // if in future then make it last year
                    if (cal.getTimeInMillis() > System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)) {
                        cal.set(Calendar.YEAR, year - 1);
                    }
                    time = cal.getTimeInMillis();
                }
                return time;
            } catch (ParseException e) {
            }
        return null;
    }

    private Map<String, String> getValues(String level, String logger, String threadName, String msg, String method) {
        Map<String, String> values = Maps.newHashMap();
        if (level != null)
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String LEVEL = "logLevel";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String LOGGER = "logLogger";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String METHOD = "logMethod";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String MSG = "logMsg";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String THREAD_NAME = "threadName";
// 
// Path: src/main/java/com/github/davidmoten/logan/Field.java
// public static final String TIMESTAMP = "logTimestamp";


// Path: src/main/java/com/github/davidmoten/logan/LogParser.java
import static com.github.davidmoten.logan.Field.LEVEL;
import static com.github.davidmoten.logan.Field.LOGGER;
import static com.github.davidmoten.logan.Field.METHOD;
import static com.github.davidmoten.logan.Field.MSG;
import static com.github.davidmoten.logan.Field.THREAD_NAME;
import static com.github.davidmoten.logan.Field.TIMESTAMP;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import com.google.common.collect.BiMap;
import com.google.common.collect.Maps;

    private Long parseTime(String timestamp) {
        Long time;
        for (SimpleDateFormat df : options.getTimestampFormat())
            try {
                StringBuilder s = new StringBuilder(timestamp);
                s.append(" ");
                s.append(options.getTimezone());
                time = df.parse(s.toString()).getTime();

                if (!df.toPattern().contains("yy")) {
                    // set year to most recent possible
                    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(options.getTimezone()));
                    int year = cal.get(Calendar.YEAR);
                    cal.setTimeInMillis(time);
                    cal.set(Calendar.YEAR, year);
                    // if in future then make it last year
                    if (cal.getTimeInMillis() > System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)) {
                        cal.set(Calendar.YEAR, year - 1);
                    }
                    time = cal.getTimeInMillis();
                }
                return time;
            } catch (ParseException e) {
            }
        return null;
    }

    private Map<String, String> getValues(String level, String logger, String threadName, String msg, String method) {
        Map<String, String> values = Maps.newHashMap();
        if (level != null)
            values.put(LEVEL, level);