Logging Exceptions Using SLF4J – 使用SLF4J记录异常情况

最后修改: 2018年 8月 2日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

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.

在这个快速教程中,我们将展示如何使用SLF4JAPI在Java中记录异常。我们将使用slf4j-simple API作为日志的实现。

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

您可以在我们的以前的文章中探索不同的记录技术。

2. Maven Dependencies

2.Maven的依赖性

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

首先,我们需要在我们的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.

这些库的最新版本可以在Maven中心找到。

3. Examples

3.例子

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:

通常,所有的异常都是使用Logger类中的error()方法进行记录。这个方法有相当多的变化。我们来探讨一下。

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 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:

在存在多个参数的情况下,如果日志语句中的最后一个参数是一个异常,那么SLF4J将假定用户希望将最后一个参数作为一个异常来处理,而不是一个简单的参数。

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.

在上面的片段中,String消息将根据传递的对象细节进行格式化。我们用大括号作为传递给方法的String参数的占位符。

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

4.结论

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

在这个快速教程中,我们发现了如何使用SLF4J API记录异常。

The code snippets are available over in the GitHub repository.

这些代码片段可在GitHub仓库中找到。