【问题标题】:logback dbappender performancelogback dbappender 性能
【发布时间】:2011-10-10 10:45:29
【问题描述】:

我希望在应用程序中使用 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 连接池,插入单个日志语句大约需要 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>

任何指针表示赞赏。

谢谢。

【问题讨论】:

  • 您能否创建一个参考测试用例,使用普通 JDBC 添加相同数量的数据,每条记录在一个单独的事务中?我认为 Logback 不会增加任何显着的开销,所以看看它可以直接完成多快会很有趣。

标签: logback


【解决方案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中获取,放到你的源码中,不知道能不能用。

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多