package ddth.dasp.framework.logging.async;
import java.util.TimerTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ddth.dasp.framework.logging.AppLogEntry;
import ddth.dasp.framework.logging.IAppLogEngine;
import ddth.dasp.framework.logging.base.AbstractCounterLogEngine;
public class AsyncAppLogEngine extends AbstractCounterLogEngine implements IAppLogEngine {
private Logger LOGGER = LoggerFactory.getLogger(AsyncAppLogEngine.class);
private IAppLogEngine[] engines;
public void setEngines(IAppLogEngine[] engines) {
this.engines = engines;
}
/**
* {@inheritDoc}
*/
@Override
public void log(AppLogEntry entry) {
incCounter();
WriteLogTask task = new WriteLogTask(entry);
scheduleTask(task);
}
private class WriteLogTask extends TimerTask {
private AppLogEntry logEntry;
public WriteLogTask(AppLogEntry logEntry) {
this.logEntry = logEntry;
}
@Override
public void run() {
if (engines != null) {
for (IAppLogEngine engine : engines) {
try {
engine.log(logEntry);
} catch (Exception e) {
LOGGER.error("Error while writing log entry " + logEntry
+ " using engine [" + engine + "]!");
}
}
}
}
}
}