in geode-core/src/main/java/org/apache/geode/internal/logging/LogFileParser.java [203:360]
public LogEntry getNextEntry() throws IOException {
LogEntry entry = null;
while (br.ready()) {
String lineStr = br.readLine();
if (lineStr == null) {
break;
}
int llen = lineStr.length();
int lend = llen;
if (suppressBlanks || firstEntry) {
// trim the end of the line
while (lend > 1 && Character.isWhitespace(lineStr.charAt(lend - 1))) {
lend--;
}
if (lend == 0) {
continue;
}
}
StringBuilder line = new StringBuilder(lineStr);
if (lend != llen) {
line.setLength(lend);
llen = lend;
}
// Matcher matcher = pattern.matcher(line);
String nextTimestamp = getTimestamp(lineStr);
// See if we've found the beginning of a new log entry. If so, bundle
// up the current string buffer and return it in a LogEntry representing
// the currently parsed text
if (nextTimestamp != null) {
if (timestamp != null && TRIM_TIMESTAMPS) {
int tsl = timestamp.length();
if (tsl > 0) {
// find where the year/mo/dy starts and delete it and the time zone
int start = 5;
if (line.charAt(start) != ' ') // info & fine
{
if (line.charAt(++start) != ' ') // finer & error
{
if (line.charAt(++start) != ' ') // finest, severe, config
{
if (line.charAt(++start) != ' ') // warning
{
start = 0;
}
}
}
}
if (start > 0) {
line.delete(start + 25, start + 29); // time zone
line.delete(start, start + 11); // date
if (TRIM_NAMES) {
int idx2 = line.indexOf("<", +12);
if (idx2 > start + 13) {
line.delete(start + 13, idx2 - 1);
}
}
}
}
if (NEWLINE_AFTER_HEADER) {
int idx = line.indexOf("tid=");
if (idx > 0) {
idx = line.indexOf("]", idx + 4);
if (idx + 1 < line.length()) {
line.insert(idx + 1, lineSeparator() + " ");
}
}
}
}
if (timestamp != null) {
entry = new LogEntry(timestamp, sb.toString(), suppressBlanks);
}
timestamp = nextTimestamp;
if (!firstEntry) {
sb = new StringBuilder(500);
} else {
firstEntry = false;
}
if (extLogFileName != null) {
sb.append(extLogFileName);
}
} else if (line.indexOf(FULL_THREAD_DUMP) != -1) {
// JRockit-style thread dumps have time stamps!
String dump = lineStr;
lineStr = br.readLine();
if (lineStr == null) {
break;
}
DateFormat df = DateFormatter.createDateFormat("E MMM d HH:mm:ss yyyy");
df.setLenient(true);
try {
Date date = df.parse(lineStr);
if (timestamp != null) {
// We've found the end of a log entry
entry = new LogEntry(timestamp, sb.toString());
}
df = DateFormatter.createDateFormat();
timestamp = df.format(date);
lineStr = dump;
sb = new StringBuilder();
if (extLogFileName != null) {
sb.append(extLogFileName);
}
sb.append("[dump ");
sb.append(timestamp);
sb.append("]").append(lineSeparator()).append(lineSeparator());
} catch (ParseException ex) {
// Oh well...
sb.append(dump);
}
} else {
sb.append(whiteFileName);
}
sb.append(line);
sb.append(lineSeparator());
if (entry != null) {
return entry;
}
}
if (timestamp == null) {
// The file didn't contain any log entries. Just use the
// current time
DateFormat df = DateFormatter.createDateFormat();
// Date now = new Date();
timestamp = df.format(new Date());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
LocalLogWriter tempLogger = new LocalLogWriter(ALL.intLevel(), pw);
tempLogger.info("MISSING TIME STAMP");
pw.flush();
sb.insert(0, lineSeparator() + lineSeparator());
sb.insert(0, sw.toString().trim());
sb.insert(0, extLogFileName);
}
// Place the final log entry
entry = new LastLogEntry(timestamp, sb.toString());
sb = null;
hasMoreEntries = false;
return entry;
}