Example #1
0
  protected SolrInputDocument parseSolrLogLine(String line, int lineNum) {

    int prev = 0;
    int pos = line.indexOf(" - ");
    if (pos != 5) return null;

    String level = line.substring(0, 5).trim();
    prev = pos + 3;
    pos = line.indexOf(";", prev);
    if (pos == -1) return null;

    String timestamp = line.substring(prev, pos).trim();
    prev = pos + 1;

    pos = line.indexOf(";", prev);
    if (pos == -1) return null;

    Date timestampDt = null;
    try {
      timestampDt = TS_PARSER.parse(timestamp);
    } catch (ParseException pe) {
      log.warn("Failed to parse timestamp at line " + lineNum + " due to: " + pe);
      return null;
    }

    String category = line.substring(prev, pos).trim();

    String message = line.substring(pos + 1).trim();

    // unique ID based on host, line num, log level, and timestamp
    String docId =
        String.format(
                "%s/%d/%s/%d/%s",
                "localhost",
                lineNum,
                level,
                timestampDt.getTime(),
                ExampleDriver.getMD5Hash(message))
            .toLowerCase();

    SolrInputDocument doc = new SolrInputDocument();
    doc.setField("id", docId);
    doc.setField("source_s", "solr"); // name of the app that created the log message
    doc.setField("host_s", "localhost:8983"); // host and port of app that created the log message
    doc.setField("level_s", level);
    doc.setField("timestamp_tdt", timestampDt);
    doc.setField("category_s", category);
    doc.setField("text_en", message);

    log.info("Parsed log message at line " + lineNum + " into SolrInputDocument: " + doc);

    return doc;
  }