1. Overview

In this quick tutorial, we'll show how to log exceptions in Java using the SLF4J API. We'll use the slf4j-simple API as the logging implementation.

You can explore different logging techniques in one of our previous articles.

2. Maven Dependencies

First, we need to add the following dependencies to our pom.xml:

<dependency>                             
    <groupId>org.slf4j</groupId>         
    <artifactId>slf4j-api</artifactId>   
    <version>1.7.30</version>  
</dependency> 
                       
<dependency>                             
    <groupId>org.slf4j</groupId>         
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.30</version>  
</dependency>

The latest versions of these libraries can be found on Maven Central.

3. Examples

Usually, all exceptions are logged using the error() method available in the Logger class. There are quite a few variations of this method. We're going to explore:

void error(String msg);
void error(String format, Object... arguments);
void error(String msg, Throwable t);

Let's first initialize the Logger that we're going to use:

Logger logger = LoggerFactory.getLogger(NameOfTheClass.class);

If we just have to show the error message, then we can simply add:

logger.error("An exception occurred!");

The output of the above code will be:

ERROR packageName.NameOfTheClass - An exception occurred!

This is simple enough. But to add more relevant information about the exception (including the stack trace) we can write:

logger.error("An exception occurred!", new Exception("Custom exception"));

The output will be:

ERROR packageName.NameOfTheClass - An exception occurred!
java.lang.Exception: Custom exception
  at packageName.NameOfTheClass.methodName(NameOfTheClass.java:lineNo)

In presence of multiple parameters, if the last argument in a logging statement is an exception, then SLF4J will presume that the user wants the last argument to be treated as an exception instead of a simple parameter:

logger.error("{}, {}! An exception occurred!", 
  "Hello", 
  "World", 
  new Exception("Custom exception"));

In the above snippet, the String message will be formatted based on the passed object details. We've used curly braces as placeholders for String parameters passed to the method.

In this case, the output will be:

ERROR packageName.NameOfTheClass - Hello, World! An exception occurred!
java.lang.Exception: Custom exception 
  at packageName.NameOfTheClass.methodName(NameOfTheClass.java:lineNo)

4. Conclusion

In this quick tutorial, we found out how to log exceptions using the SLF4J API.

The code snippets are available over in the GitHub repository.