开发者社区> 问答> 正文

logs优化

比如在DruidDataSource的785行(版本1.0.29),日志为LOG.info("{dataSource-" + this.getID() + "} inited"); 如果有多个datasource的话,通过id是比较难识别到底是那个datasource,希望加一下name等信息,或者有个地方打印了id对应的name是什么

原提问者GitHub用户w6et

展开
收起
山海行 2023-07-05 21:05:35 61 0
3 条回答
写回答
取消 提交回答
  • 根据您提供的描述,您希望在Druid连接池的日志中打印数据源的名称或其他信息,以便更好地识别不同的数据源。

    在Druid连接池中,默认的日志输出中并没有直接打印数据源的名称。但是,您可以通过以下两种方式来实现日志优化:

    1. 使用setName方法设置数据源的名称:

    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl("jdbc:mysql://localhost:3306/test");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    dataSource.setName("myDataSource"); // 设置数据源的名称
    

    您可以在创建DruidDataSource对象后使用setName方法设置数据源的名称。然后,在日志中打印数据源的名称时,可以使用getName方法获取数据源的名称,例如:

    LOG.info("{dataSource-" + this.getName() + "} inited");
    

    这样,您就可以在日志中看到类似于{dataSource-myDataSource} inited的输出。

    2. 使用日志过滤器打印更多信息:

    Druid连接池提供了多个日志过滤器,可以在日志中打印更多的信息,包括数据源的名称、URL、用户名、密码等。您可以通过设置setFilters方法来启用日志过滤器。

    例如,如果您希望使用log4j进行日志记录,可以设置如下:

    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl("jdbc:mysql://localhost:3306/test");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    dataSource.setFilters("log4j"); // 设置日志过滤器
    

    然后,在log4j的配置文件(如log4j.properties或log4j.xml)中,可以使用以下格式化字符串来打印数据源的名称:

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %c{1.} %m%n
    
    log4j.logger.com.alibaba.druid.pool.DruidDataSource=DEBUG, stdout
    

    在上述配置中,我们定义了一个名为stdoutConsoleAppender,并使用PatternLayout格式化器来指定输出日志的格式。在格式化字符串中,您可以使用%c{1.}来表示输出日志的类名,只显示最后一个点号后的部分。

    然后,将com.alibaba.druid.pool.DruidDataSource的日志级别设置为DEBUG,并将输出日志的目标设置为stdout

    这样配置后,在日志中就可以看到类似于[2023-08-02 10:44:22.561] DEBUG DruidDataSource {myDataSource} inited的输出,其中{myDataSource}表示数据源的名称。

    2023-07-30 15:07:59
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在Druid连接池中,每个DruidDataSource都有一个唯一的ID,用于标识该数据源。如果您希望在日志中打印数据源的名称或其他信息,可以通过以下几种方式实现:

    使用setName方法设置数据源的名称
    在创建DruidDataSource对象后,您可以使用setName方法设置数据源的名称。例如:

    java
    Copy
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl("jdbc:mysql://localhost:3306/test");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    dataSource.setName("myDataSource"); // 设置数据源的名称
    在这个例子中,我们通过setName方法设置了数据源的名称为myDataSource。

    在日志中打印数据源的名称时,可以使用getName方法获取数据源的名称。例如:

    java
    Copy
    LOG.info("{dataSource-" + this.getName() + "} inited");
    在这个例子中,我们使用getName方法获取数据源的名称,并将其插入到日志信息中。

    使用setFilters方法设置日志过滤器
    Druid连接池提供了多个日志过滤器,可以在日志中打印更多的信息。例如,log4j日志过滤器可以在日志中打印数据源的名称、URL、用户名、密码等信息。

    在创建DruidDataSource对象后,您可以使用setFilters方法设置日志过滤器。例如:

    java
    Copy
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl("jdbc:mysql://localhost:3306/test");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    dataSource.setFilters("log4j"); // 设置日志过滤器
    在这个例子中,我们通过setFilters方法设置了日志过滤器为log4j。

    在日志中打印数据源的名称时,可以使用[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %c{1.} %m%n格式化字符串,并将其配置到log4j.properties或log4j.xml文件中。例如:

    properties
    Copy
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %c{1.} %m%n

    log4j.logger.com.alibaba.druid.pool.DruidDataSource=DEBUG, stdout
    在这个配置中,我们定义了一个名为stdout的ConsoleAppender,并配置了一个PatternLayout格式化器。在PatternLayout格式化器中,我们使用了[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %c{1.} %m%n格式化字符串,其中%c{1.}表示输出日志的类名,只显示最后一个点号后的部分。

    在log4j.logger中,我们将com.alibaba.druid.pool.DruidDataSource的日志级别设置为DEBUG,并将输出日志的目标设置为stdout。

    这样配置后,在日志中就可以看到类似以下的输出:

    Copy
    [2023-08-02 10:44:22.561] DEBUG DruidDataSource {myDataSource} inited
    在这个输出中,我们可以看到数据源的名称为myDataSource。

    2023-07-30 13:02:22
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:53:36
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载