9.3.2 log4j.xml配置日志

9.3.2 log4j.xml配置日志

之前的Java项目都是采取properties文件作为配置文件,而最新的项目大多采用XML文件作为配置文件。

对mapper接口的日志配置

在应用的CLASSPATH中增加一个名称为log4j.xml的文件(G:\Desktop\随书源码\Spring+Mybatis企业应用实战(第2版)\codes\09\DMLTest\src\log4j.xml)

文件的具体内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> -->
<!DOCTYPE log4j:configuration
PUBLIC "-//LOG4J//DTD LOG4J//EN"
"https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" >
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT"
class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%5p [%t] %m%n" />
</layout>
</appender>
<logger name="org.fkit.mapper.UserMapper">
<level value="TRACE" />
</logger>
<root>
<level value="ERROR" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

类级别的日志

添加以上配置后,Log4j就会把org.fkit.mapper.UserMapperTRACE(详细执行)日志记录下来,对于应用中的其他类则仅仅记录ERROR(错误信息)。

语句级别的日志

也可以将日志从整个mapper接口级别调整到语句级别,从而实现更细粒度的控制。如下配置只记录selectUser语句的日志:

<logger name="org.fkit.mapper.UserMapper.selectUser">
    <level value="TRACE" />
</logger>

包级别的日志

也可以对一组mapper接口记录日志,只要对mapper接口所在的包开启日志功能即可:

1
2
3
<logger name="org.fkit.mapper">
<level value="TRACE" />
</logger>

日志只记录执行的SQL语句

某些查询可能会返回大量的数据,如果只想记录其执行的SQL语句该怎么办? 为此,

  • MyBatisSQL语句的日志级别被设为DEBUGJDK Logging中为FINE),
  • 结果日志的级别为TRACEJDK Logging中为FINER)。

所以,只要将日志级别调整为DEBUG即可:

1
2
3
<logger name="org.fkit.mapper">
<level value="DEBUG" />
</logger>

如果要记录日志的是类似下面的mapper文件而不是mapper接口又该怎么办呢?

对mapper文件的日志配置

如果要记录日志的是类似下面的mapper文件而不是接口又该怎么办呢?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace指用户自定义的命名空间。 -->
<mapper namespace="org.fkit.mapper.UserMapper">
    <insert
        id="saveUser"
        parameterType="user"
        useGeneratedKeys="true"
        keyProperty="id"> insert into tb_user(name,sex,age) values(#{name},#{sex},#{age})
    </insert>
</mapper>

只要对命名空间增加日志记录功能即可:

类级别的日志

1
2
3
<logger name="org.fkit.mapper.UserMapper">
<level value="DEBUG" />
</logger>