You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Log4j2 JDBC Appender配置PoolingDriver报错求解决方案

Log4j2 JDBC Appender 连接池配置报错解决

问题场景

在Spring Boot应用中配置Log4j2的JDBC Appender时,使用PoolingDriver出现connectionSource为空的错误,但替换为DriverManager可正常运行。

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <JDBC name="DB" tableName="log">
            <PoolingDriver connectionString="url" userName="username" password="password"/>
            <Column name="COD_LOG_ID" literal="log0.nextval"/>
            <Column name="TIM_TIMESTAM" isEventTimestamp="true"/>
            <Column name="DES_LOGGER" pattern="%c"/>
            <Column name="COD_JLEVEL" pattern="%level"/>
            <Column name="DES_LMESSAGE" pattern="%m%n%ex{full}" isClob="true"/>
        </JDBC>

        <Async name="Async">
            <AppenderRef ref="DB"/>
        </Async>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Async"/>
        </Root>
    </Loggers>
</Configuration>

错误信息

2023-06-07 12:36:23,622 main ERROR No ConnectionSource provided: connectionSource
2023-06-07 12:36:23,628 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender for element JDBC org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element JDBC are invalid: field 'connectionSource' has invalid value 'null'
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:210)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1120)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1045)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1037)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:651)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:247)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:293)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:626)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:699)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:716)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:270)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
    at org.apache.commons.logging.LogAdapter$Log4jLog.<clinit>(LogAdapter.java:155)
    at org.apache.commons.logging.LogAdapter$Log4jAdapter.createLog(LogAdapter.java:122)
    at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:89)
    at org.apache.commons.logging.LogFactoryService.getInstance(LogFactoryService.java:46)
    at org.apache.commons.logging.LogFactoryService.getInstance(LogFactoryService.java:41)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
    at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:196)
    at com.bbva.eysea.ganbaru.Application.main(Application.java:28)

解决提示

1. 补充连接池依赖

PoolingDriver并非Log4j2核心包自带组件,需引入对应连接池的Log4j集成依赖:

  • 若使用Apache DBCP2,添加Maven依赖:
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jdbc-dbcp2</artifactId>
        <version>与你的Log4j2版本一致</version>
    </dependency>
    
  • 若使用HikariCP,添加Maven依赖:
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jdbc-hikaricp</artifactId>
        <version>与你的Log4j2版本一致</version>
    </dependency>
    

2. 修正配置结构

PoolingDriver不能直接作为JDBC Appender的子元素,需使用对应的ConnectionSource实现类:

示例:DBCP2连接池配置

<JDBC name="DB" tableName="log">
    <PoolingConnectionSource driverClassName="com.mysql.cj.jdbc.Driver"
                             url="jdbc:mysql://localhost:3306/your_db"
                             userName="username"
                             password="password"
                             maxTotal="10"
                             maxIdle="5"/>
    <Column name="COD_LOG_ID" literal="log0.nextval"/>
    <Column name="TIM_TIMESTAM" isEventTimestamp="true"/>
    <Column name="DES_LOGGER" pattern="%c"/>
    <Column name="COD_JLEVEL" pattern="%level"/>
    <Column name="DES_LMESSAGE" pattern="%m%n%ex{full}" isClob="true"/>
</JDBC>

示例:HikariCP连接池配置

<JDBC name="DB" tableName="log">
    <HikariConnectionSource driverClassName="com.mysql.cj.jdbc.Driver"
                             jdbcUrl="jdbc:mysql://localhost:3306/your_db"
                             username="username"
                             password="password"
                             maximumPoolSize="10"/>
    <Column name="COD_LOG_ID" literal="log0.nextval"/>
    <Column name="TIM_TIMESTAM" isEventTimestamp="true"/>
    <Column name="DES_LOGGER" pattern="%c"/>
    <Column name="COD_JLEVEL" pattern="%level"/>
    <Column name="DES_LMESSAGE" pattern="%m%n%ex{full}" isClob="true"/>
</JDBC>

3. 验证数据库参数

确保driverClassName、连接URL、用户名、密码与你的数据库环境匹配,比如MySQL 8+需使用com.mysql.cj.jdbc.Driver而非旧版驱动类。


内容的提问来源于stack exchange,提问作者thmasker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:14:59