@Override
public Record nextRecord(boolean coerceTypes, boolean dropUnknownFields) throws IOException, MalformedRecordException {
String line = reader.readLine();
if (line == null) {
return null;
}
if (StringUtils.isBlank(line)) {
throw new MalformedRecordException("Encountered a blank message!");
}
final MalformedRecordException malformedRecordException;
SyslogEvent event = parser.parseEvent(ByteBuffer.wrap(line.getBytes(parser.getCharsetName())));
if (!event.isValid()) {
malformedRecordException = new MalformedRecordException(
String.format("Failed to parse %s as a Syslog message: it does not conform to any of the RFC" +
" formats supported", line));
throw malformedRecordException;
}
final Map<String, Object> syslogMap = new HashMap<>(8);
syslogMap.put(SyslogAttributes.PRIORITY.key(), event.getPriority());
syslogMap.put(SyslogAttributes.SEVERITY.key(), event.getSeverity());
syslogMap.put(SyslogAttributes.FACILITY.key(), event.getFacility());
syslogMap.put(SyslogAttributes.VERSION.key(), event.getVersion());
syslogMap.put(SyslogAttributes.TIMESTAMP.key(), event.getTimeStamp());
syslogMap.put(SyslogAttributes.HOSTNAME.key(), event.getHostName());
syslogMap.put(SyslogAttributes.BODY.key(), event.getMsgBody());
return new MapRecord(schema, syslogMap);
}