2013-10-18 5 views
5

में स्प्रिंग डेटा स्रोत का उपयोग करते हुए मैं एक webapp इसलिए की तरह एक कनेक्शन जमा डेटा स्रोत सेटअप करने के लिए वसंत का उपयोग करता है:एक 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 उपयोग करता है। Logback एक DBAppender के साथ एक logback.xml फ़ाइल में कॉन्फ़िगर किया गया है:

<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> 

आप हम डेटा स्रोत सेट कर रहे हैं दो बार, और प्रत्येक मामले में अलग संपत्ति प्रतिस्थापन की आवश्यकता होती है देख सकते हैं। वसंत को डेटा स्रोत बनाने और इसे लॉगबैक डीबीएपीएन्डर को पास करने के लिए बस इतना बेहतर होगा।

क्या कोई ऐसा करने का सबसे अच्छा तरीका सुझा सकता है?

उत्तर

0

एक विकल्प यह प्रोग्राम के रूप में कॉन्फ़िगर करने के लिए एक सेम है:

@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; 
} 

बेशक यह मतलब है कि यह किसी भी घटना के समय से पहले इस सेम बनाया गया था हुआ लॉग नहीं करेगा।

संबंधित मुद्दे