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; }