Javabrake is a Java notifier for Airbrake.
Gradle:
implementation 'io.airbrake:javabrake:0.2.4'
Maven:
<dependency>
<groupId>io.airbrake</groupId>
<artifactId>javabrake</artifactId>
<version>0.2.4</version>
</dependency>
Ivy:
<dependency org='io.airbrake' name='javabrake' rev='0.2.4'>
<artifact name='javabrake' ext='pom'></artifact>
</dependency>
Configuration:
import io.airbrake.javabrake.Notifier;
import io.airbrake.javabrake.Config;
Config config = new Config();
config.projectId = 12345;
config.projectKey = "FIXME";
Notifier notifier = new Notifier(config);
notifier.addFilter(
(Notice notice) -> {
notice.setContext("environment", "production");
return notice;
});
Using notifier
directly:
try {
do();
} catch (IOException e) {
notifier.report(e);
}
Using Airbrake
proxy class:
import io.airbrake.javabrake.Airbrake;
try {
do();
} catch (IOException e) {
Airbrake.report(e);
}
By default report
sends errors asynchronously returning a Future
, but synchronous API is also available:
import io.airbrake.javabrake.Notice;
Notice notice = Airbrake.reportSync(e);
if (notice.exception != null) {
logger.info(notice.exception);
} else {
logger.info(notice.id);
}
To set custom params you can build and send notice in separate steps:
import io.airbrake.javabrake.Notice;
Notice notice = Airbrake.buildNotice(e);
notice.setContext("component", "mycomponent");
notice.setParam("param1", "value1");
Airbrake.send(notice);
You can also set custom params on all reported notices:
notifier.addFilter(
(Notice notice) -> {
notice.setParam("myparam", "myvalue");
return notice;
});
Or ignore specific notice:
notifier.addFilter(
(Notice notice) -> {
if (notice.context.get("environment") == "development") {
// Ignore notice.
return null;
}
return notice;
});
To debug why notices are not sent you can use onReportedNotice
hook:
notifier.onReportedNotice(
(notice) -> {
if (notice.exception != null) {
logger.info(notice.exception);
} else {
logger.info(String.format("notice id=%s url=%s", notice.id, notice.url));
}
});
See https://github.com/airbrake/log4javabrake2
See https://github.com/airbrake/logback
javabrake uses OkHttp as an HTTP client. So in order to use proxy all you have to do is to configure OkHttpClient:
import java.net.InetSocketAddress;
import okhttp3.OkHttpClient;
import okhttp3.Proxy;
import io.airbrake.javabrake.OkSender;
Proxy proxy = new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved("192.168.1.105", 8081);
OkHttpClient httpClient =
new OkHttpClient.Builder()
.connectTimeout(3000, TimeUnit.MILLISECONDS)
.readTimeout(3000, TimeUnit.MILLISECONDS)
.writeTimeout(3000, TimeUnit.MILLISECONDS)
.proxy(proxy)
.build();
OkSender.setOkHttpClient(httpClient);
Make sure you build and release this notifier with open-jdk-8, one way to manage your local java version is using asdf. You can install this tool via homebrew:
brew install asdf
Then install open-jdk-8 and set it as JAVA home before running any of the ./gradlew
commands:
asdf plugin add java
asdf install java adoptopenjdk-8.0.312+7
export JAVA_HOME=$HOME/.asdf/installs/java/adoptopenjdk-8.0.312+7
./gradlew build
Upload to JCentral:
./gradlew bintrayUpload
Upload to Maven Central:
./gradlew uploadArchives
./gradlew closeAndReleaseRepository
Usefull links: