SpringBoot log4j2日志之旅

3 篇文章 0 订阅
2 篇文章 0 订阅

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
     

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值