gpt4 book ai didi

java - 如何使用 Spring Boot 应用程序初始化 log4j?

转载 作者:行者123 更新时间:2023-12-02 09:17:58 25 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,我想在该应用程序中使用 log4j。问题是我有一个像(log4j2.xml);这样的 JDBC 附加程序;

<JDBC name="customDBAppender" tableName="mytable">
<ConnectionFactory
class="com.example.logger.ConnectionFactory" method="getConnection" />
....
</JDBC>

我有一个静态 getConnection 方法,我需要在此方法中访问我的数据库属性(用户名、密码)。

我认为 log4j 使用反射来创建与此方法的连接(甚至在 Spring Context 初始化之前),因此我无法使用 Spring 注入(inject)数据库属性。有什么办法可以注入(inject)这个属性吗?

我的ConnectionFactory类;

public class ConnectionFactory {

public static Connection getConnection() throws SQLException {
Connection connection = new Connection("dbusername", "dbpassword".....)
....
}

}

最佳答案

正如您所猜测的,您不能以这种方式配置 jdbc-appender。相反,您需要从 log4j2 配置中删除 jdbc 附加程序,并在 Bean 中实用地创建它。例如在 @Configuration bean 中。

另请注意,即使可以这样工作,您也应该始终使用连接池而不是单个连接池,否则它确实会降低您的应用性能。

因此请执行以下操作:

@Configuration
public class JdbcAppenderConfiguration {
@Autowired
private DataSource dataSource;

//Or @PostConstruct
@EventListener
public void handleContextStart(ContextStartedEvent cse) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
ColumnConfig[] cc = {
ColumnConfig.createColumnConfig(config, "date", null, null, "true", null, null),
ColumnConfig.createColumnConfig(config, "level", "%level", null, null, null, null),
ColumnConfig.createColumnConfig(config, "logger", "%logger", null, null, null, null),
ColumnConfig.createColumnConfig(config, "message", "%message", null, null, null, null),
ColumnConfig.createColumnConfig(config, "throwable", "%ex{short}", null, null, null, null),
ColumnConfig.createColumnConfig(config, "salarie_id", "%X{SALARIE_ID}", null, null, null, null)
} ;
Appender appender = JdbcAppender.createAppender("databaseAppender", "true", null, new Connect(dataSource), "0", "sicdb.bo_log", cc);
appender.start();
config.addAppender(appender);
LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
loggerConfig.addAppender(appender, null, null);
ctx.updateLoggers();
}
}

关于java - 如何使用 Spring Boot 应用程序初始化 log4j?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com