package org.orienteer.logger.server;
import org.apache.wicket.authorization.AuthorizationException;
import org.apache.wicket.authorization.UnauthorizedActionException;
import org.apache.wicket.core.request.mapper.StalePageException;
import org.apache.wicket.request.Url;
import org.apache.wicket.util.string.Strings;
import org.orienteer.logger.IOLoggerConfiguration;
import org.orienteer.logger.IOLoggerEventDispatcher;
import org.orienteer.logger.OLoggerEvent;
import org.orienteer.logger.impl.DefaultOLoggerEventDispatcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* {@link IOLoggerEventDispatcher} for handle {@link OLoggerEvent}s within Orienteer: log localy and send to other host
*/
public class EmbeddedOLoggerEventDispatcher extends DefaultOLoggerEventDispatcher {
private static final Logger LOG = LoggerFactory.getLogger(EmbeddedOLoggerEventDispatcher.class);
@Override
public void dispatch(OLoggerEvent event) {
if(needsToBeLogged(event)) {
OLoggerModule.storeOLoggerEvent(event.toJson());
super.dispatch(event);
}
}
protected boolean needsToBeLogged(OLoggerEvent event) {
Object seed = event.getSeed();
if(seed instanceof Throwable) return needsToBeLogged((Throwable)seed);
else return true;
}
protected boolean needsToBeLogged(Throwable event) {
if(event instanceof StalePageException
|| event instanceof AuthorizationException
|| event instanceof UnauthorizedActionException) return false;
else return true;
}
@Override
public void configure(IOLoggerConfiguration configuration) {
super.configure(configuration);
if(!Strings.isEmpty(collectorUrl)) {
Url url = Url.parse(collectorUrl);
if(Strings.isEmpty(url.getPath())) {
collectorUrl = collectorUrl+(collectorUrl.endsWith("/")?"":"/")+"rest/ologger";
}
}
}
@Override
protected void syslog(OLoggerEvent event) {
// NOP: it should be already logged
}
@Override
protected void syslog(String message, Exception exc) {
if(message==null && exc == null) return;
else if(message!=null && exc == null) LOG.error(message);
else if(message==null && exc != null) LOG.error("Error in dispatcher", exc);
else LOG.error(message, exc);
}
}