上一篇介紹了 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文件即可。