连接器和 API 手册  / 第 3 章 MySQL Connector/J 开发人员指南  /  3.11 将日志记录框架与 SLF4J 一起使用

3.11 将日志记录框架与 SLF4J 一起使用

除了记录到 的默认记录器外 com.mysql.cj.log.StandardLoggerstderrConnector/J 还支持 SLF4J 日志外观,允许使用 Connector/J 的应用程序的最终用户在部署时插入他们自己选择的日志框架。SLF4J 支持流行的日志记录框架,例如 java.util.logginglogback和。log4j遵循这些要求以将日志记录框架与 SLF4J 和 Connector/J 结合使用:

  • 在开发环境中:

    • 在您的系统上安装 slf4j-api-x.y.z.jar(可从 https://www.slf4j.org/download.html获得)并将其添加到 Java 类路径中。

    • 在您的应用程序代码中,获取 an SLF4JLogger作为在 a中Log 实例化的实例MysqlConnection Session,然后将该 Log实例用于您的日志记录。

  • 在部署系统上:

    • 在您的系统上安装 slf4j-api-x.y.z.jar并将其添加到 Java 类路径

    • 在您的系统上为您选择的日志记录框架安装 SLF4J 绑定,并将其添加到您的 Java 类路径中。SLF4J 绑定可从 https://www.slf4j.org/manual.html#swapping获得。

      笔记

      不要在 Java 类路径中放置多个 SLF4J 绑定。通过删除绑定并将新的绑定添加到类路径,从一个日志记录框架切换到另一个。

    • 在您的系统上安装您选择的日志记录框架并将其添加到 Java 类路径中。

    • 配置您选择的日志记录框架。这通常包括使用配置文件为日志消息设置附加程序或处理程序;有关详细信息,请参阅您的日志记录框架的文档。

    • 将应用程序连接到 MySQL 服务器时,将 Connector/J 连接属性 logger设置为 Slf4JLogger

Connector/J 与 SLF4J 使用的日志类别名称是 MySQL. 有关使用 SLF4J 的更多详细信息,包括有关 Maven 依赖性和绑定的讨论,请参阅 SLF4J 用户手册。以下是将 SLF4J 与 Connector/J 结合使用的示例代码:

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.cj.jdbc.JdbcConnection;
import com.mysql.cj.log.Log;
public class JDBCDemo {
 
  public static void main(String[] args) {
 
    Connection conn = null;
    Statement statement = null;
    ResultSet resultSet = null;
    Log logger = null;
 
  try {
     // Database parameters
     String url = "jdbc:mysql://myexample.com:3306/pets?logger=Slf4JLogger&explainSlowQueries=true";
     String user = "user";
     String password = "password";
     // create a connection to the database
     conn = DriverManager.getConnection(url, user, password);
     logger = ((JdbcConnection)conn).getSession().getLog();
  }
  catch (SQLException e) {
     System.err.println(e.getMessage());
     System.exit(1);
   }
  try {
     statement = conn.createStatement();
     resultSet = statement.executeQuery("SELECT * FROM pets.dogs");
     while(resultSet.next()){
       System.out.printf("%d\t%s\t%s\t %4$ty.%4$tm.%4$td \n",
       resultSet.getInt(1),
       resultSet.getString(2),
       resultSet.getString(3),
       resultSet.getDate(4));
     }
  } 
  catch(SQLException e) {
     logger.logWarn("Warning: Select failed!");
  } 
}
}

例如,如果您想在运行此程序时使用 Log4j 2.17.1 作为日志记录框架,请将这些 JAR 文件放在您的 Java 类路径中:

这是 SELECT 语句失败时程序的输出:

[2021-09-05 12:06:19,624] WARN     0[main] - WARN MySQL - Warning: Select failed!