日常我们调试程序的时候都是打印日志,但是使用日志记录能够将日志详细信息永久写入文件,更加方便我们查阅,在hibernate框架中使用 Log4j和Logback框架来支持日志记录。
使用log4j执行日志记录有两种方式:通过log4j.xml文件或者log4j.properties文件.
使用Log4j执行Hibernate日志记录的步骤
使用log4j执行日志记录包含两步:

  1. 使用hibernate加载log4j的jar文件,本例使用的mvn方式,所以添加依赖即可
  2. 在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

现在我的项目结构如下:

Hibernate使用Log4j日志记录_apache