• Druid中使用log4j2进行日志输出


    1. pom.xml中springboot版本依赖
    <!--Spring-boot中去掉logback的依赖-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
    <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>

    <!--数据库连接池-->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.6</version>
    </dependency>

    <!--其他依赖-->

    2. log4j2.xml文件中的日志配置(完整,可直接拷贝使用)
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="OFF">
    <appenders>

    <Console name="Console" target="SYSTEM_OUT">
    <!--只接受程序中DEBUG级别的日志进行处理-->
    <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss.SSS}] %-5level %class{36} %L %M - %msg%xEx%n"/>
    </Console>

    <!--处理DEBUG级别的日志,并把该日志放到logs/debug.log文件中-->
    <!--打印出DEBUG级别日志,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
    <RollingFile name="RollingFileDebug" fileName="./logs/debug.log"
    filePattern="logs/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
    <Filters>
    <ThresholdFilter level="DEBUG"/>
    <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
    </Filters>
    <PatternLayout
    pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
    <Policies>
    <SizeBasedTriggeringPolicy size="500 MB"/>
    <TimeBasedTriggeringPolicy/>
    </Policies>
    </RollingFile>

    <!--处理INFO级别的日志,并把该日志放到logs/info.log文件中-->
    <RollingFile name="RollingFileInfo" fileName="./logs/info.log"
    filePattern="logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
    <Filters>
    <!--只接受INFO级别的日志,其余的全部拒绝处理-->
    <ThresholdFilter level="INFO"/>
    <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
    </Filters>
    <PatternLayout
    pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
    <Policies>
    <SizeBasedTriggeringPolicy size="500 MB"/>
    <TimeBasedTriggeringPolicy/>
    </Policies>
    </RollingFile>

    <!--处理WARN级别的日志,并把该日志放到logs/warn.log文件中-->
    <RollingFile name="RollingFileWarn" fileName="./logs/warn.log"
    filePattern="logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
    <Filters>
    <ThresholdFilter level="WARN"/>
    <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
    </Filters>
    <PatternLayout
    pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
    <Policies>
    <SizeBasedTriggeringPolicy size="500 MB"/>
    <TimeBasedTriggeringPolicy/>
    </Policies>
    </RollingFile>

    <!--处理error级别的日志,并把该日志放到logs/error.log文件中-->
    <RollingFile name="RollingFileError" fileName="./logs/error.log"
    filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
    <ThresholdFilter level="ERROR"/>
    <PatternLayout
    pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"/>
    <Policies>
    <SizeBasedTriggeringPolicy size="500 MB"/>
    <TimeBasedTriggeringPolicy/>
    </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>
    <root level="DEBUG">
    <appender-ref ref="Console"/>
    <appender-ref ref="RollingFileInfo"/>
    <appender-ref ref="RollingFileWarn"/>
    <appender-ref ref="RollingFileError"/>
    <appender-ref ref="RollingFileDebug"/>
    </root>

    <!--记录druid-sql的记录-->
    <logger name="druid.sql.Statement" level="debug" additivity="false">
    <appender-ref ref="druidSqlRollingFile"/>
    </logger>
    <logger name="druid.sql.Statement" level="debug" additivity="false">
    <appender-ref ref="druidSqlRollingFile"/>
    </logger>

    <!--log4j2 自带过滤日志-->
    <Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
    <Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
    <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
    <logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
    <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
    <Logger name="org.crsh.plugin" level="warn" />
    <logger name="org.crsh.ssh" level="warn"/>
    <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
    <Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
    <logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
    <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
    <logger name="org.thymeleaf" level="warn"/>
    </loggers>
    </configuration>

    3. 配置application.properties
    # 配置日志输出
    spring.datasource.druid.filter.slf4j.enabled=true
    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.result-set-open-after-log-enabled=false
    spring.datasource.druid.filter.slf4j.result-set-close-after-log-enabled=false

    4. 输出日志于druid-sql.log
    [2018-02-07 14:15:50] DEBUG 134 statementLog - {conn-10001, pstmt-20000} created. INSERT INTO city ( id,name,state ) VALUES( ?,?,? )
    [2018-02-07 14:15:50] DEBUG 134 statementLog - {conn-10001, pstmt-20000} Parameters : [null, b2ffa7bd-6b53-4392-aa39-fdf8e172ddf9, a9eb5f01-f6e6-414a-bde3-865f72097550]
    [2018-02-07 14:15:50] DEBUG 134 statementLog - {conn-10001, pstmt-20000} Types : [OTHER, VARCHAR, VARCHAR]
    [2018-02-07 14:15:50] DEBUG 134 statementLog - {conn-10001, pstmt-20000} executed. 5.113815 millis. INSERT INTO city ( id,name,state ) VALUES( ?,?,? )
    [2018-02-07 14:15:50] DEBUG 134 statementLog - {conn-10001, stmt-20001} executed. 0.874903 millis. SELECT LAST_INSERT_ID()
    [2018-02-07 14:15:52] DEBUG 134 statementLog - {conn-10001, stmt-20002, rs-50001} query executed. 0.622665 millis. SELECT 1

  • 相关阅读:
    《做衣服:破坏时尚》总结
    《程序员的思维修炼》总结
    纸玫瑰和鲜玫瑰,选择哪个?
    《古怪的身体:时尚是什么》总结
    《世界尽头的咖啡馆》总结
    《软技能:代码之外的生存指南》总结
    构造无限级树的框架套路,附上python/golang/php/js实现
    《Dior的时尚笔记》总结
    《编写可读代码的艺术》总结
    《费曼学习法》总结
  • 原文地址:https://www.cnblogs.com/sinoknots/p/15722296.html
Copyright © 2020-2023  润新知