zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/sinoknots/p/15722296.html
Copyright © 2011-2022 走看看