2013-10-18 16 views
5

春データソースを使用する:私はそうのようなコネクションプールされたデータソースのセットアップに春を使用してWebアプリケーションを持っているlogbackのDBAppender

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driverClassName}" /> 
    <property name="jdbcUrl" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 

アプリは、データベースに直接ログイベントのためにlogbackを使用しています。あなたは私たちは二度DataSourceを設定し、それぞれの場合に別のプロパティの置換を必要としている見ることができるように

<appender name="eventsDB" class="ch.qos.logback.classic.db.DBAppender"> 
    <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> 
     <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
     <driverClass>${jdbc.driverClassName}</driverClass> 
     <jdbcUrl>${jdbc.url}</jdbcUrl> 
     <user>${jdbc.username}</user> 
     <password>${jdbc.password}</password> 
     </dataSource> 
    </connectionSource> 
    </appender> 

:LogbackはDBAppenderとlogback.xmlファイルに設定されています。 SpringがdataSourceを作成し、それをログバックDBAppenderに渡すだけで良いのではないでしょうか。

誰もがこれを行うための最善の方法を提案できますか?

答えて

0

1つのオプションは、Beanとしてプログラムでそれを設定することです。もちろん

@Bean 
public DBAppender dbAppender(DataSource dataSource){ 
    DBAppender dbAppender = new DBAppender(); 
    DataSourceConnectionSource connectionSource = new DataSourceConnectionSource(); 
    connectionSource.setDataSource(dataSource); 
    connectionSource.start(); 
    dbAppender.setConnectionSource(connectionSource); 
    dbAppender.start(); 

    LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    Logger logger = loggerContext.getLogger("ROOT"); 
    logger.addAppender(dbAppender); 

    return dbAppender; 
} 

これは、このBeanが作成される前に起こったすべてのイベントをログに記録しないことを意味します。

関連する問題