in src/main/java/org/apache/log4j/receivers/varia/LogFilePatternReceiver.java [479:534]
protected void process(BufferedReader bufferedReader) throws IOException {
Matcher eventMatcher;
Matcher exceptionMatcher;
String line;
while ((line = bufferedReader.readLine()) != null) {
//skip empty line entries
eventMatcher = regexpPattern.matcher(line);
if (line.trim().equals("")) {continue;}
exceptionMatcher = exceptionPattern.matcher(line);
if (eventMatcher.matches()) {
//build an event from the previous match (held in current map)
LoggingEvent event = buildEvent();
if (event != null) {
if (passesExpression(event)) {
doPost(event);
}
}
currentMap.putAll(processEvent(eventMatcher.toMatchResult()));
} else if (exceptionMatcher.matches()) {
//an exception line
additionalLines.add(line);
} else {
//neither...either post an event with the line or append as additional lines
//if this was a logging event with multiple lines, each line will show up as its own event instead of being
//appended as multiple lines on the same event..
//choice is to have each non-matching line show up as its own line, or append them all to a previous event
if (appendNonMatches) {
//hold on to the previous time, so we can do our best to preserve time-based ordering if the event is a non-match
String lastTime = (String)currentMap.get(TIMESTAMP);
//build an event from the previous match (held in current map)
if (currentMap.size() > 0) {
LoggingEvent event = buildEvent();
if (event != null) {
if (passesExpression(event)) {
doPost(event);
}
}
}
if (lastTime != null) {
currentMap.put(TIMESTAMP, lastTime);
}
currentMap.put(MESSAGE, line);
} else {
additionalLines.add(line);
}
}
}
//process last event if one exists
LoggingEvent event = buildEvent();
if (event != null) {
if (passesExpression(event)) {
doPost(event);
}
}
}