Druid开启日志

在这里插入图片描述

Druid开启日志

最近总是会有线上机器的com.alibaba.druid.pool.DruidDataSource.CreateConnectionThread会无故的退出,导致池中连接处小于minIdle甚至变成0, 所以就想打印这个线程或者DruidDataSource的日志来帮忙定位一下问题。

那么就让我们来看一下druid的日志体系吧。

Logger name如何生效的

首先先引入Loggername配置的是如何生效的吧。

  1. logger的name具有父子关系,比如org就是org.springframework的父级。org的配置也会对org.springframework生效。
  2. 我们配置的logger的name是怎么来的? 不论是使用@Slf4j还是LoggerFactory,我们最常见的传参就是class的name,这也就是为什么我们经常会以包名的方式配置。

Druid的日志体系

Druid的Log实现

com.alibaba.druid.support.logging.LogFactory中会按照以下顺序尝试找到一个合适的实现。

tryImplementation("org.slf4j.Logger", "com.alibaba.druid.support.logging.SLF4JImpl");
tryImplementation("org.apache.log4j.Logger", "com.alibaba.druid.support.logging.Log4jImpl");
tryImplementation("org.apache.logging.log4j.Logger", "com.alibaba.druid.support.logging.Log4j2Impl");
tryImplementation("org.apache.commons.logging.LogFactory",
                          "com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl");
tryImplementation("java.util.logging.Logger", "com.alibaba.druid.support.logging.Jdk14LoggingImpl");

com.alibaba.druid.support.logging.SLF4JImpl中可以看到还是使用的Slf4j的api进行获取。

public SLF4JImpl(String loggerName){
     this.log = (LocationAwareLogger) LoggerFactory.getLogger(loggerName);
}
Druid的LogFilter

配置LogFilter官网可以看到LogFilter的介绍,那么这种又是什么呢?

从名字上可以看出来,是Filter。从源码上看其中的一部分,就会明白这种是关于druid内置了一些filter的日志打印店,从而可以灵活控制打印相关的日志。

public void connection_close(FilterChain chain, ConnectionProxy connection) throws SQLException {
    super.connection_close(chain, connection);

    if (connectionCloseAfterLogEnable && isConnectionLogEnabled()) {
       connectionLog("{conn-" + connection.getId() + "} closed");
    }
}

然后结合代码就会看到这四种Logger的名称,所以在log的配置文件可以使用druid.sql或者druid.sql.Connection进行配置Logger的打印日志。

protected String          dataSourceLoggerName                 = "druid.sql.DataSource";
protected String          connectionLoggerName                 = "druid.sql.Connection";
protected String          statementLoggerName                  = "druid.sql.Statement";
protected String          resultSetLoggerName                  = "druid.sql.ResultSet";

那么如何打印我们想要的日志呢?

DruidDataSource中可以看到Log名称是以classname,所以可以使用com.alibaba.druid.pool进行配置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 添加druid依赖 在pom.xml中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 2. 配置druid数据源 在application.yml中添加以下配置: ```yaml spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: root # druid配置 type: com.alibaba.druid.pool.DruidDataSource # 初始化大小,最小,最大 initialSize: 1 minIdle: 1 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久进行检测,关闭空闲连接 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 filters: stat,wall # 监控配置 web-stat-filter: enabled: true url-pattern: /* exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" stat-view-servlet: enabled: true url-pattern: /druid/* reset-enable: true login-username: admin login-password: admin ``` 3. 启动应用 启动应用后,访问http://localhost:8080/druid即可查看druid监控页面。同时,也可以在控制台中看到druid的启动日志

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值