package tc.oc.commons.core.exception;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nullable;
import javax.inject.Inject;
import tc.oc.commons.core.logging.Loggers;
import tc.oc.commons.core.util.StackTrace;
/**
* TODO: Merge with {@link tc.oc.exception.LoggingExceptionHandler}
*/
public class LoggingExceptionHandler implements ExceptionHandler<Throwable>, Thread.UncaughtExceptionHandler {
private final Loggers loggers;
@Inject public LoggingExceptionHandler(Loggers loggers) {
this.loggers = loggers;
}
protected String messagePrefix() {
return "Unhandled exception";
}
@Override
public void handleException(Throwable throwable, @Nullable Object source, @Nullable StackTrace trace) {
String message = messagePrefix();
if(source != null) {
message += " from " + source;
}
if(trace != null) {
message += " created...\n" + trace;
}
final Logger logger = source == null ? loggers.defaultLogger()
: loggers.defaultLogger(source.getClass());
logger.log(Level.SEVERE, message, throwable);
}
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
handleException(throwable, thread);
}
}