SpringBoot log4j2日志之旅
1、首先配置 pom.xml 文件,将原有的 logback 移除,改用 log4j2 。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
2、添加 log4j2 的包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
3、添加 log4j2.xml 配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorinterval="10" status="debug">
<Properties>
<Property name="infoFile">./logs/info.log</Property>
<Property name="infoFilePattern">./logs/info.log.%d{yyyy-MM-dd}_%i</Property>
<Property name="errorFile">./logs/error.log</Property>
<Property name="errorFilePattern">./logs/error.log.%d{yyyy-MM-dd}_%i</Property>
<Property name="layoutPattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] [%t] %c(%F:%L) - %m%n</Property>
</Properties>
<Appenders>
<Console name="Console">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] [%t] %c(%F:%L) - %m%n"/>
</Console>
<RollingFile fileName="${infoFile}" filePattern="${infoFilePattern}" name="infoAppender">
<!--显示warn级别下日志-->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/>
<PatternLayout pattern="${layoutPattern}"/>
<!--每个文件最多只能2G-->
<Policies>
<SizeBasedTriggeringPolicy size="2 GB" />
<TimeBasedTriggeringPolicy modulate="true"/>
</Policies>
<!--删除超过15天的日志-->
<DefaultRolloverStrategy>
<Delete basePath="./logs" maxDepth="2">
<IfLastModified age="30d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<RollingFile fileName="${errorFile}" filePattern="${errorFilePattern}" name="errorAppender">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${layoutPattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="2 GB" />
<TimeBasedTriggeringPolicy modulate="true"/>
</Policies>
</RollingFile>
<!--druid的日志记录追加器-->
<RollingFile name="druidSqlRollingFile" fileName="./logs/druid-sql.log"
filePattern="logs/$${date:yyyy-MM}/api-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="500 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!--additivity="false"表示在该logger中输出的日志不会再延伸到父层logger。这里如果改为true,则会延伸到Root Logger,遵循Root Logger的配置也输出一次。-->
<Logger name="org.springframework.boot.autoconfigure" level="DEBUG" additivity="true">
<AppenderRef ref="Console"/>
</Logger>
<!--记录druid-sql的记录 start-->
<logger name="druid.sql.Statement" level="DEBUG" additivity="false">
<appender-ref ref="druidSqlRollingFile"/>
<appender-ref ref="Console"/>
</logger>
<!-- <logger name="druid.sql.DataSource" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="druidSqlRollingFile"/>-->
<!-- <appender-ref ref="Console"/>-->
<!-- </logger>-->
<!-- <logger name="druid.sql.Connection" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="druidSqlRollingFile"/>-->
<!-- <appender-ref ref="Console"/>-->
<!-- </logger>-->
<!-- <logger name="druid.sql.ResultSet" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="druidSqlRollingFile"/>-->
<!-- <appender-ref ref="Console"/>-->
<!-- </logger>-->
<!--记录druid-sql的记录 end-->
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="infoAppender"/>
<AppenderRef ref="errorAppender"/>
</Root>
</Loggers>
</Configuration>
4.打印druid sql日志
4.1 在log4j2.xml 配置文件中添加logger
<!--记录druid-sql的记录 start-->
<logger name="druid.sql.Statement" level="DEBUG" additivity="false">
<appender-ref ref="druidSqlRollingFile"/>
<appender-ref ref="Console"/>
</logger>
<!-- <logger name="druid.sql.DataSource" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="druidSqlRollingFile"/>-->
<!-- <appender-ref ref="Console"/>-->
<!-- </logger>-->
<!-- <logger name="druid.sql.Connection" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="druidSqlRollingFile"/>-->
<!-- <appender-ref ref="Console"/>-->
<!-- </logger>-->
<!-- <logger name="druid.sql.ResultSet" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="druidSqlRollingFile"/>-->
<!-- <appender-ref ref="Console"/>-->
<!-- </logger>-->
<!--记录druid-sql的记录 end-->
4.2 在application.properties中添加配置
## 开启日志过滤器
spring.datasource.druid.filters=slf4j
## 打印出可以执行的SQL
spring.datasource.druid.filter.slf4j.enabled=true
spring.datasource.druid.filter.slf4j.statement-executable-sql-log-enable=true
spring.datasource.druid.filter.slf4j.connection-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-create-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-close-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-prepare-after-log-enabled=false
spring.datasource.druid.filter.slf4j.result-set-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-execute-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-execute-batch-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-execute-query-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-execute-update-after-log-enabled=false
或者在application.yaml中添加配置
spring:
datasource:
druid:
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJyEm+x8bHLOGhj55ZZy8Ug1WqBjTGXuu/Rz5JZ5lTtjQ9mqwv69G8FtaBHOtKHL+ll5SXDIGFpOcU3A0+eSMpECAwEAAQ==
stat-view-servlet:
enabled: true
url-pattern: /druid/*
allow: 127.0.0.1
login-username: root
login-password: root
reset-enable: false
web-stat-filter:
enabled: true
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
url-pattern: /*
filter:
slf4j:
enabled: true
statement-log-enabled: true
statementExecutableSqlLogEnable: true
statement-sql-pretty-format: true
statement-close-after-log-enabled: false
statement-create-after-log-enabled: false
statement-execute-after-log-enabled: false
statement-execute-batch-after-log-enabled: false
statement-execute-query-after-log-enabled: false
statement-execute-update-after-log-enabled: false
statement-log-error-enabled: true
statement-parameter-clear-log-enable: false
statement-parameter-set-log-enabled: false
statement-prepare-after-log-enabled: false
statement-prepare-call-after-log-enabled: false
filters: stat,wall,slf4j,config
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/foo?useSSL=false&useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
username: root
password: eNDCOPEEjiLph59Hkp4oI8c/TAljTNVIFHU/YvT3ZjjC0fsXhqP5uDRygzR8APFuqNg+MCEQ3ZjMgbQ/oRC5Aw==
connect-properties:
config.decrypt: true
config.decrypt.key: ${spring.datasource.druid.publickey}
filters: stat,wall,slf4j,config
max-active: 100
initial-size: 10
max-wait: 60000
min-idle: 10
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-open-prepared-statements: 50
max-pool-prepared-statement-per-connection-size: 20