package net.lightoze.errbit; import net.lightoze.errbit.api.Backtrace; import net.lightoze.errbit.api.Error; import net.lightoze.errbit.api.Request; import org.apache.commons.lang.StringUtils; import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.spi.ThrowableInformation; /** * @author Vladimir Kulev */ public class Log4jNoticeBuilder extends NoticeBuilder { protected LoggingEvent event; public NoticeBuilder setEvent(LoggingEvent event) { this.event = event; return this; } @Override public net.lightoze.errbit.api.Error error() { Error error = new Error(); Throwable throwable = throwable(event); if (throwable != null) { error.setBacktrace(backtrace(throwable)); error.setClazz(throwable.getClass().getName()); } else { error.setBacktrace(new Backtrace()); error.setClazz(event.getLoggerName()); } String msg = event.getRenderedMessage(); if (StringUtils.isBlank(msg) && throwable != null) { msg = throwable.toString(); } error.setMessage(msg); return error; } @Override public Request request() { Request request = new Request(); request.setComponent(event.getLoggerName()); return request; } public static Throwable throwable(LoggingEvent event) { ThrowableInformation info = event.getThrowableInformation(); if (info != null) { return info.getThrowable(); } Object message = event.getMessage(); if (message instanceof Throwable) { return (Throwable) message; } return null; } }