日常我们调试程序的时候都是打印日志,但是使用日志记录能够将日志详细信息永久写入文件,更加方便我们查阅,在hibernate框架中使用 Log4j和Logback框架来支持日志记录。
使用log4j执行日志记录有两种方式:通过log4j.xml文件或者log4j.properties文件.
使用Log4j执行Hibernate日志记录的步骤
使用log4j执行日志记录包含两步:
看下我的pom.xml文件:
现在创建log4j.xml文件。 在此示例中,所有日志详细信息将被写入当前项目的log4j_hibernate.log文件。
log4j.xml文件的内容如下
现在创建log4j.properties文件。 在此示例中,所有日志详细信息将被写入hibernate-log4j.log文件中。有一点要注意,xml文件优先级要比properties文件优先级高,所以,如果两种日志方式同时存在,只有xml方式有用。
log4j.properties文件的内容如下
使用log4j执行日志记录有两种方式:通过log4j.xml文件或者log4j.properties文件.
使用Log4j执行Hibernate日志记录的步骤
使用log4j执行日志记录包含两步:
- 使用hibernate加载log4j的jar文件,本例使用的mvn方式,所以添加依赖即可
- 在src文件夹内创建log4j.xml文件或log4j.properties文件(与hibernate.cfg.xml文件同个目录)
看下我的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HibernateDemo</groupId>
<artifactId>HibernateDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- log -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
</project>
创建log4j.xml文件
现在创建log4j.xml文件。 在此示例中,所有日志详细信息将被写入当前项目的log4j_hibernate.log文件。
log4j.xml文件的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n"/>
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</appender>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="log4j_hibernate.log"/>
<param name="MaxBackupIndex" value="100"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n"/>
</layout>
</appender>
<category name="org.hibernate">
<priority value="DEBUG"/>
</category>
<category name="java.sql">
<priority value="debug"/>
</category>
<root>
<priority value="INFO"/>
<appender-ref ref="FILE"/>
</root>
</log4j:configuration>
创建log4j.properties文件
现在创建log4j.properties文件。 在此示例中,所有日志详细信息将被写入hibernate-log4j.log文件中。有一点要注意,xml文件优先级要比properties文件优先级高,所以,如果两种日志方式同时存在,只有xml方式有用。
log4j.properties文件的内容如下
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=hibernate-log4j.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Root logger option
log4j.rootLogger=INFO, file, stdout
# Log everything. Good for troubleshooting
log4j.logger.org.hibernate=INFO
# Log all JDBC parameters
log4j.logger.org.hibernate.type=ALL
现在我的项目结构如下: