Spring boot springboot:配置Log4j2以使用springboot数据源
我正在使用Spring Boot(1.5.9-RELEASE)构建一个应用程序,我想使用log4j2 我想将log4j2配置为使用JDBC连接登录到数据库表 我的问题是,我无法配置log4j2来使用我为Spring Boot配置的数据源 我知道log4j2在Spring Boot启动之前启动,所以我在其中添加了一些代码,在Spring Boot加载之后,它让log4j2重新配置自己 我的问题是我无法从Spring Boot获取数据源的实例 我对依赖注入不是很熟悉,但我假设,由于我需要Spring Boot来注入数据源,因此我创建DBUtils实例的方法是行不通的。 但是由于log4j2需要一个提供连接的静态方法,所以我不确定如何让它工作Spring boot springboot:配置Log4j2以使用springboot数据源,spring-boot,dependency-injection,log4j2,Spring Boot,Dependency Injection,Log4j2,我正在使用Spring Boot(1.5.9-RELEASE)构建一个应用程序,我想使用log4j2 我想将log4j2配置为使用JDBC连接登录到数据库表 我的问题是,我无法配置log4j2来使用我为Spring Boot配置的数据源 我知道log4j2在Spring Boot启动之前启动,所以我在其中添加了一些代码,在Spring Boot加载之后,它让log4j2重新配置自己 我的问题是我无法从Spring Boot获取数据源的实例 我对依赖注入不是很熟悉,但我假设,由于我需要Spring
问题: 1) 有人能解释一下我如何使用log4j2Spring Boots数据源吗? 或者我必须在DBUtils中创建一个新的连接池,并让log4j2使用该池吗
Spring启动配置 我已经包含了spring-boot-starter-log4j2依赖项,并排除了默认的spring-boot记录器spring-boot-starter日志 application.properties的一部分 这个url是有效的,我只是不在网上发布:p 来自log4j2.xml的JDBC追加器 入门级
我找到了解决这个问题的办法。它并不完美,因为它不使用Spring引导连接池,但它对我来说很有用 步骤如下:
有什么最新消息吗?我有一个类似的问题。我最近发现了一篇文章,展示了如何通过编程方式添加JdbcAppender。它要求您创建自己的连接池,但它可以完美地工作。
spring.datasource.name=mainDataSource
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=---a valid JDBC URL---
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
logging.config=classpath:log4j2.xml
<Jdbc
name="DatabaseAppender"
tableName="pws_logs">
<ConnectionFactory
class="com.test.utils.DBUtils"
method="getConnection" />
<Column
name="log_date"
isEventTimestamp="true" />
<Column
name="log_level"
pattern="%-5level" />
<Column
name="logger"
pattern="%40.40logger" />
<Column
name="line_num"
pattern="%line" />
<Column
name="message"
pattern="%message" />
<Column
name="throwable"
pattern="%throwable"
isClob="true" />
</Jdbc>
package com.test.utils;
import java.sql.Connection;
import javax.sql.DataSource;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class DBUtils {
private static DBUtils dbUtils = null;
@Autowired
@Qualifier("mainDataSource")
private DataSource dataSource;
public static Connection getConnection() throws Exception {
return DBUtils.getDBUtils().getSingleConnection();
}
private static DBUtils getDBUtils() {
if (DBUtils.dbUtils == null) {
DBUtils.dbUtils = new DBUtils();
}
return DBUtils.dbUtils;
}
private DataSource getDataSource() throws Exception {
if (this.dataSource == null) {
logger.error("Spring-Boot failed to inject database datasource.");
}
return this.dataSource;
}
private Connection getSingleConnection() throws Exception {
try {
return this.getDataSource().getConnection();
} catch (Exception e) {
logger.error("Failed to get database connection.", e);
throw e;
}
}
}
package com.test;
import javax.annotation.PostConstruct;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PaymentWsApplication {
private static Logger logger = null;
@PostConstruct
public static void initLogger() {
final LoggerContext loggerContext = LoggerContext.getContext(false);
loggerContext.reconfigure();
PaymentWsApplication.logger = LogManager.getLogger(PaymentWsApplication.class);
logger.info("********************** Application started-up.");
}
public static void main(final String[] args) {
SpringApplication.run(PaymentWsApplication.class, args);
}
}