2011-10-10 222 views
2

我正在尋找在應用程序中使用Logback Classic DB Appender(ch.qos.logback.classic.db.DBAppender)。數據庫是Sybase ASE。我使用c3p0連接池。logback dbappender性能

除了數據庫appender,我也有一個滾動文件appender。問題是,在數據庫Appender中,我看到性能急劇下降。例如,僅使用滾動文件appender,需要13 ms(毫秒)才能將消息記錄到文件。但是,使用滾動文件appender和db appender時,需要4510 ms(4.5秒)才能將同一組消息輸出到文件和數據庫。

Logback DBAppender文檔提到,使用c3p0連接池,插入單個日誌記錄語句大約需要1ms。我看到的數字比這個數字多出一千倍。不知道什麼是錯的。以下是我的logback.xml文件:

<configuration debug="true" scan="true"> 

    <property resource="log.properties" /> 

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${log.file.dir}/${project.artifactId}.log</file> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <!-- daily rollover --> 
      <fileNamePattern>${project.artifactId}.%d{yyyy-MM-dd}.log</fileNamePattern> 
      <!-- keep 30 days' worth of history --> 
      <maxHistory>${log.file.rolling.history.days}</maxHistory> 
     </rollingPolicy> 

     <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> 
     <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> 
      <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
       <driverClass>${log.db.driver}</driverClass> 
       <jdbcUrl>jdbc:sybase:Tds:${log.db.server}:${log.db.port}/${log.db.name}</jdbcUrl> 
       <serverName>${log.db.server}</serverName> 
       <databaseName>${log.db.name}</databaseName> 
       <user>${log.db.user}</user> 
       <password>${log.db.password}</password> 
      </dataSource> 
     </connectionSource> 
    </appender> 

    <root level="INFO"> 
     <appender-ref ref="CONSOLE" /> 
     <appender-ref ref="FILE" /> 
    </root> 

</configuration> 

任何指針讚賞。

謝謝。

+1

您可以創建一個參考測試用例,使用普通JDBC添加相同數量的數據,每個記錄在單獨的事務中?我不認爲Logback會增加任何重要的開銷,所以看看它可以直接完成的速度有多快會很有趣。 –

回答

1

我發現從的logback手冊以下事項:如果你的JDBC驅動程序支持JDBC 3.0規範中引入了的getGeneratedKeys方法,假設你已經創建了相應的數據庫表如上所述

,則不需要更多的步驟,除了用於通常的登錄配置。

否則,必須有適合您的數據庫系統的SQLDialect。目前,我們有PostgreSQL,MySQL,Oracle和MS SQL Server的方言。

對於Oracle來說,它說支持的版本是:(10.2.0.1)

鏈接: http://logback.qos.ch/manual/appenders.html#DBAppender

如果你沒有在你的JDBC驅動程序方言類,可以從休眠搞定,把它放在你的源頭,我不知道它是否可以工作。