上一篇介绍了 JPA 使用llogback输出SQL日志到文件, 这篇我们使用log4j:
还使用上节的单元测试代码 :先修改一下POM:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <!-- 排除自带的logback依赖 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
通常的log4j2的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <!--这个输出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t{2}] %-5level %logger{4} - %msg%n"/> </console> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="logs/cis-mr-audit.log" filePattern="logs/$${date:yyyy-MM}/cis-mr-audit-%d{yyyy-MM-dd}-%i.log"> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="5 MB"/> </Policies> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFileInfo" /> </Root> </Loggers> </Configuration>
注意,这里没有对每一个的appender设置level,统一使用root的level.
和上节一样,如果yml文件没有特殊配置的话,也是输出不了sql的。
即使加了show-sql也只是在console中显示,在日志文件中不显示。
同上节的配置样,问题出在org.hibernate.sql和org.hibernate.type.descriptor.sql.BasicBinder上
修改yml配置文件:
logging:
level:
root: info
org:
hibernate:
SQL: debug #debug时显示sql
type:
descriptor:
sql:
BasicBinder: trace #trace时,显示参数
这样console与文件中的sql就都可以显示了,在生产切换日志级别,只需要修改yml文件即可。