![](/img/trans.png)
[英]How to initialize Log4J as early as possible in an Java EE application?
[英]How to initialize log4j with Spring Boot application?
我有一個 Spring 引導應用程序,我想在這個應用程序中使用 log4j。 問題是我有一個 JDBC appender like(log4j2.xml);
<JDBC name="customDBAppender" tableName="mytable">
<ConnectionFactory
class="com.example.logger.ConnectionFactory" method="getConnection" />
....
</JDBC>
我有一個 static getConnection 方法,我需要在這個方法中訪問我的數據庫屬性(用戶名、密碼)。
我認為 log4j 使用反射來創建與此方法的連接(甚至在 Spring 上下文初始化之前),所以我無法使用 Spring 注入我的數據庫屬性。 有沒有辦法注入這個屬性?
我的 ConnectionFactory class;
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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.