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

og4javabrake2.0.1.2.source-code.AirbrakeAppender Maven / Gradle / Ivy

package io.airbrake.log4javabrake2;

import java.util.ArrayList;
import java.util.List;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.filter.AbstractFilter;
import org.apache.logging.log4j.message.Message;

import io.airbrake.javabrake.Airbrake;
import io.airbrake.javabrake.Notice;
import io.airbrake.javabrake.NoticeError;
import io.airbrake.javabrake.NoticeStackRecord;

@Plugin(name = "Airbrake", category = "Core", elementType = "appender", printObject = true)
public class AirbrakeAppender extends AbstractAppender {
  protected AirbrakeAppender(String name, Filter filter) {
    super(name, filter, null, true);
  }

  @Override
  public void append(LogEvent event) {
    Notice notice = newNotice(event);
    notice.setContext("severity", formatLevel(event.getLevel()));
    if (event.getContextStack() != null) {
      notice.setParam("contextStack", event.getContextStack().asList());
    }
    if (event.getContextData() != null) {
      notice.setParam("contextData", event.getContextData());
    }
    if (event.getMarker() != null) {
      notice.setParam("marker", event.getMarker().getName());
    }
    Airbrake.send(notice);
  }

  @PluginFactory
  public static AirbrakeAppender createAppender(
      @PluginAttribute("name") String name, @PluginElement("Filter") final Filter filter) {
    if (name == null) {
      LOGGER.error("No name provided for AirbrakeAppender");
      return null;
    }
    return new AirbrakeAppender(name, filter);
  }

  static Notice newNotice(LogEvent event) {
    Throwable throwable = event.getThrown();
    if (throwable != null) {
      return new Notice(throwable);
    }

    Message eventMessage = event.getMessage();
    throwable = eventMessage.getThrowable();
    if (throwable != null) {
      return new Notice(throwable);
    }

    String type = event.getLoggerName();
    String message = eventMessage.getFormattedMessage();
    StackTraceElement[] stackTrace = null;

    if (event.getSource() != null) {
      stackTrace = new StackTraceElement[1];
      stackTrace[0] = event.getSource();
    }

    NoticeError err = new NoticeError(type, message, stackTrace);

    List errors = new ArrayList<>();
    errors.add(err);

    return new Notice(errors);
  }

  static String formatLevel(Level level) {
    if (level.isMoreSpecificThan(Level.FATAL)) {
      return "critical";
    }
    if (level.isMoreSpecificThan(Level.ERROR)) {
      return "error";
    }
    if (level.isMoreSpecificThan(Level.WARN)) {
      return "warn";
    }
    if (level.isMoreSpecificThan(Level.INFO)) {
      return "info";
    }
    if (level.isMoreSpecificThan(Level.DEBUG)) {
      return "debug";
    }
    return "trace";
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy