logb производительность dbappender - PullRequest
2 голосов
/ 10 октября 2011

Я хочу использовать в приложении Logback Classic DB Appender (ch.qos.logback.classic.db.DBAppender). База данных Sybase ASE. Я использую пул соединений c3p0.

Помимо приложения для работы с БД, у меня также есть приложение для работы с файлами. Проблема в том, что с 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>

Любые указатели оценены.

Спасибо.

1 Ответ

1 голос
/ 27 марта 2012

Я нашел следующее из руководства по logback:

Если ваш драйвер JDBC поддерживает метод getGeneratedKeys, представленный в спецификации JDBC 3.0, при условии, что вы создали соответствующие таблицы базы данных, как упомянуто выше, больше никаких шагов не требуется,за исключением обычной конфигурации обратного входа.

В противном случае должен существовать SQLDialect, подходящий для вашей системы баз данных.В настоящее время у нас есть диалекты для PostgreSQL, MySQL, Oracle и MS SQL Server.

для оракула, говорится, что поддерживаемая версия: (10.2.0.1)

ссылка: http://logback.qos.ch/manual/appenders.html#DBAppender

Если в вашем драйвере JDBC нет класса Dialect, вы можете перейти из hibernate и поместить его в исходный код, я не знаю, может ли он работать.

...