}
@Override
public void send(final Event event) {
if (worker.isShutdown()) {
throw new LoggingException("Unable to record event");
}
Map<String, String> headers = event.getHeaders();
byte[] keyData = headers.get(FlumeEvent.GUID).getBytes(UTF8);
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream daos = new DataOutputStream(baos);
daos.writeInt(event.getBody().length);
daos.write(event.getBody(), 0, event.getBody().length);
daos.writeInt(event.getHeaders().size());
for (Map.Entry<String, String> entry : headers.entrySet()) {
daos.writeUTF(entry.getKey());
daos.writeUTF(entry.getValue());
}
byte[] eventData = baos.toByteArray();
if (secretKey != null) {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
eventData = cipher.doFinal(eventData);
}
final DatabaseEntry key = new DatabaseEntry(keyData);
final DatabaseEntry data = new DatabaseEntry(eventData);
Transaction txn = environment.beginTransaction(null, null);
try {
database.put(txn, key, data);
txn.commit();
queue.add(keyData);
} catch (Exception ex) {
if (txn != null) {
txn.abort();
}
throw ex;
}
} catch (Exception ex) {
throw new LoggingException("Exception occurred writing log event", ex);
}
}