You are on page 1of 2

Logging Frameworks with SLF4J

Besides its default logger com.mysql.cj.log.StandardLogger, which logs to stderr,


Connector/J supports the SLF4J logging facade, allowing end users of applications using
Connector/J to plug in logging frameworks of their own choices at deployment time. Popular
logging frameworks such as java.util.logging, logback, and log4j are supported by
SLF4J. Follow these requirements to use a logging framework with SLF4J and Connector/J:
 In the development environment:

o Install on your system slf4j-api-x.y.z.jar (available


at https://www.slf4j.org/download.html) and add it to the Java classpath.
o In the code of your application, obtain an SLF4JLogger as a Log instantiated
within a MysqlConnection Session, and then use the Log instance for your logging.
 On the deployment system:

o Install on your system slf4j-api-x.y.z.jar and add it to the Java classpath


o Install on your system the SLF4J binding for the logging framework of your choice
and add it to your Java classpath. SLF4J bindings are available at, for
example, https://www.slf4j.org/manual.html#swapping.
Note
Do not put more than one SLF4J binding in you Java classpath. Switch from
one logging framework to another by removing a binding and adding a new one
to the classpath.

o Install the logging framework of your choice on your system and add it to the
Java classpath.

o Configure the logging framework of your choice. This often consists of setting up
appenders or handlers for log messages using a configuration file; see your logging
framework's documentation for details.

o When connecting the application to the MySQL Server, set the Connector/J
connection property logger to Slf4JLogger.
The log category name used by Connector/J with SLF4J is MySQL. See the SLF4J user
manual for more details about using SLF4J, including discussions on Maven dependency and
bindings. Here is a sample code for using SLF4J with 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!");
}

}
If you want to use, for example, Log4j 1.2.17 as your logging framework when running this
program, use its binding to SLF4J: put slf4j-api-1.7.28.jar (SLF4J API module), slf4j-
log4j12-1.7.28.jar (SLF4J's binding for Log4J 1.2), and log4j-1.2.17.jar (Log4J library)
in your Java classpath.
Here is output of the program when the SELECT statement failed:

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


failed!

You might also like