我希望在应用程序中使用Logback Classic DB Appender(ch.qos.logback.classic.db.DBAppender)。数据库是Sybase ASE。我使用c3p0连接池。
除了DB appender,我还有一个滚动文件appender。问题是,使用DB Appender,我发现性能急剧下降。例如,仅使用滚动文件追加器,将消息记录到文件需要13毫秒(毫秒)。但是,使用滚动文件appender和db appender,将同一组消息输出到文件和数据库需要4510毫秒(4.5秒)。
Logback DBAppender文档提到使用c3p0连接池,插入单个日志记录语句大约需要1毫秒。我看到的数字是这个数字的千倍。想知道什么可能是错的。以下是我的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>
任何指示赞赏。
感谢。
答案 0 :(得分:1)
我在logback手册中找到了以下内容:
如果您的JDBC驱动程序支持JDBC 3.0规范中引入的getGeneratedKeys方法,假设您已经如上所述创建了相应的数据库表,则除了通常的logback配置外,不再需要其他步骤。
否则,必须有适合您的数据库系统的SQLDialect。目前,我们有PostgreSQL,MySQL,Oracle和MS SQL Server的方言。
对于oracle,它说支持的版本是:(10.2.0.1)
链接: http://logback.qos.ch/manual/appenders.html#DBAppender
如果您的JDBC驱动程序中没有Dialect类,您可以从hibernate获取,并将其放在源代码中,我不知道它是否可以正常工作。