All Downloads are FREE. Search and download functionalities are using the official Maven repository.

airbrake.AirbrakeAppender Maven / Gradle / Ivy

// Modified or written by Luca Marrocco for inclusion with airbrake.
// Copyright (c) 2009 Luca Marrocco.
// Licensed under the Apache License, Version 2.0 (the "License")

package airbrake;

import org.apache.log4j.*;
import org.apache.log4j.spi.*;

public class AirbrakeAppender extends AppenderSkeleton {

	private final AirbrakeNotifier airbrakeNotifier = new AirbrakeNotifier();

	private String apiKey;

	private String env;

	private boolean enabled;

	private Backtrace backtrace = new Backtrace();

	public AirbrakeAppender() {
		setThreshold(Level.ERROR);
	}

	public AirbrakeAppender(final String apiKey) {
		setApi_key(apiKey);
		setThreshold(Level.ERROR);
	}

	public AirbrakeAppender(final String apiKey, final Backtrace backtrace) {
		setApi_key(apiKey);
		setBacktrace(backtrace);
		setThreshold(Level.ERROR);
	}

	@Override
	protected void append(final LoggingEvent loggingEvent) {
		if (!enabled)
			return;

		if (thereIsThrowableIn(loggingEvent)) {
			notifyThrowableIn(loggingEvent);
		}
	}

	@Override
	public void close() {
	}

	public AirbrakeNotice newNoticeFor(final Throwable throwable) {
		return new AirbrakeNoticeBuilderUsingFilteredSystemProperties(apiKey,
				backtrace, throwable, env).newNotice();
	}

	private int notifyThrowableIn(final LoggingEvent loggingEvent) {
		return airbrakeNotifier.notify(newNoticeFor(throwable(loggingEvent)));
	}

	@Override
	public boolean requiresLayout() {
		return false;
	}

	public void setApi_key(final String apiKey) {
		this.apiKey = apiKey;
	}

	public void setBacktrace(final Backtrace backtrace) {
		this.backtrace = backtrace;
	}

	public void setEnabled(final boolean enabled) {
		this.enabled = enabled;
	}

	public void setEnv(final String env) {
		this.env = env;
	}

	public void setUrl(final String url) {
		airbrakeNotifier.setUrl(url);
	}

	/**
	 * Checks if the LoggingEvent contains a Throwable
	 * @param loggingEvent
	 * @return
	 */
	private boolean thereIsThrowableIn(final LoggingEvent loggingEvent) {
		return  loggingEvent.getThrowableInformation() != null ||
				loggingEvent.getMessage() instanceof Throwable;
	}

	/**
	 * Get the throwable information contained in a {@link LoggingEvent}.
	 * Returns the Throwable passed to the logger or the message if it's a
	 * Throwable.
	 * @param loggingEvent
	 * @return The Throwable contained in the {@link LoggingEvent} or null if there is none.
	 */
	private Throwable throwable(final LoggingEvent loggingEvent) {
		ThrowableInformation throwableInfo = loggingEvent.getThrowableInformation();
		if (throwableInfo != null)
			return throwableInfo.getThrowable();
		
		Object message = loggingEvent.getMessage();
		if (message instanceof Throwable)
			return (Throwable) message;
		
		return null;
	}

	protected String getApiKey() {
		return apiKey;
	}
	
	public Backtrace getBacktrace() {
		return backtrace;
	}

	protected String getEnv() {
		return env;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy