Logging Exceptions Thrown out of Java Methods and Swallowing Them
Annotate your methods with @Quietly annotation and every exception thrown out of the method will not be propagated, but will be logged through SLF4J:
public class Resource {
private Object content;
@Quietly
public void load(URL url) {
this.content = url.openConnection().getContent();
}
}If an exception occurs, it will not be thrown to the caller and it will be logged through SLF4J logging facility.
Also, take a look at @LogExceptions annotation. It does the same, but it propagates exceptions thrown to the caller.
Methods annotated with @Quietly must strictly have a void return type; otherwise, an exception will be thrown at runtime when the method is invoked. If you wish to check for non-compliant methods at compile time, you may incorporate the annotation processor QuietlyReturnTypeProcessor during your build. An example usage with maven-processor-plugin is:
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>com.jcabi.aspects.apt.QuietlyReturnTypeProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
</plugin>The mechanism is implemented with AOP/AspectJ. Read to know how to integrate it into your pom.xml.