in log4j-server/src/main/java/org/apache/logging/log4j/server/InputStreamLogEventBridge.java [52:96]
public void logEvents(final InputStream inputStream, final LogEventListener logEventListener)
throws IOException, ParseException {
String workingText = Strings.EMPTY;
try {
// Allocate buffer once
final byte[] buffer = new byte[bufferSize];
String textRemains = workingText = Strings.EMPTY;
while (true) {
// Process until the stream is EOF.
final int streamReadLength = inputStream.read(buffer);
if (streamReadLength == END) {
// The input stream is EOF
break;
}
final String text = workingText = textRemains + new String(buffer, 0, streamReadLength, charset);
int beginIndex = 0;
while (true) {
// Extract and log all XML events in the buffer
final int[] pair = getEventIndices(text, beginIndex);
final int eventStartMarkerIndex = pair[0];
if (eventStartMarkerIndex < 0) {
// No more events or partial XML only in the buffer.
// Save the unprocessed string part
textRemains = text.substring(beginIndex);
break;
}
final int eventEndMarkerIndex = pair[1];
if (eventEndMarkerIndex > 0) {
final int eventEndXmlIndex = eventEndMarkerIndex + eventEndMarker.length();
final String textEvent = workingText = text.substring(eventStartMarkerIndex, eventEndXmlIndex);
final LogEvent logEvent = unmarshal(textEvent);
logEventListener.log(logEvent);
beginIndex = eventEndXmlIndex;
} else {
// No more events or partial XML only in the buffer.
// Save the unprocessed string part
textRemains = text.substring(beginIndex);
break;
}
}
}
} catch (final IOException ex) {
logger.error(workingText, ex);
}
}