Version v0.26 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot. For up-to-date documentation, see the latest version.

Logging

We are currently working on the translation from Japanese to English. We would appreciate your cooperation.

概要

KomapperはSQLやトランザクションに関するログを出力します。

出力先のデフォルトは標準出力ですが変更可能です。

ログカテゴリ

Komapperが出力するログのカテゴリは以下に示す4つです。

  • org.komapper.SQL
  • org.komapper.SQL_WITH_ARGS
  • org.komapper.TRANSACTION
  • org.komapper.OTHER

org.komapper.SQL

このカテゴリのログは次のようなバインド変数である?が含まれた形式のSQLでdebugレベルで出力されます。

insert into ADDRESS (STREET, VERSION, CREATED_AT, UPDATED_AT) values (?, ?, ?, ?)
select t0_.ADDRESS_ID, t0_.STREET, t0_.VERSION, t0_.CREATED_AT, t0_.UPDATED_AT from ADDRESS as t0_ where t0_.ADDRESS_ID = ?

org.komapper.SQL_WITH_ARGS

このカテゴリのログは次のようなバインド変数である?が実際の引数で置換された形式のSQLでtraceレベルで出力されます。

insert into ADDRESS (STREET, VERSION, CREATED_AT, UPDATED_AT) values ('street A', 0, '2021-07-31T21:23:24.511', '2021-07-31T21:23:24.511')
select t0_.ADDRESS_ID, t0_.STREET, t0_.VERSION, t0_.CREATED_AT, t0_.UPDATED_AT from ADDRESS as t0_ where t0_.ADDRESS_ID = 1

org.komapper.TRANSACTION

このカテゴリのログは次のようなトランザクションの開始やコミットを示すメッセージでtraceレベルで出力されます。

The transaction "83d5c2e5-8d3b-4a45-a5bb-215f846a0327" has begun.
The transaction "83d5c2e5-8d3b-4a45-a5bb-215f846a0327" has committed.

org.komapper.OTHER

このカテゴリは他のどのカテゴリにも属さないログを表します。 デフォルトでは利用されていません。

LoggerFacadeの利用例

LoggerFacadeを使えば、ログメッセージやログレベルの変更ができます。

SQLのログレベルを変更する場合の設定例

例えば、SQLのログレベルをDEBUGからINFOに変更したい場合は、以下のような実装を作成します。

class MyLoggerFacade(private val logger: Logger): LoggerFacade by DefaultLoggerFacade(logger) {
    override fun sql(statement: Statement, format: (Int, StatementPart.PlaceHolder) -> CharSequence) {
        logger.info(LogCategory.SQL.value) {
            statement.toSql(format)
        }
    }
}

上記の実装クラスをJdbcDatabaseConfigに設定するには次のように記述します。

val dataSource: DataSource = ..
val dialect: JdbcDialect = ..
val config: JdbcDatabaseConfig = object: DefaultJdbcDatabaseConfig(dataSource, dialect) {
  override val loggerFacade: LoggerFacade by {
    MyLoggerFacade(logger)
  }
}
val db = JdbcDatabase.create(config)

SLF4Jの利用

SLF4J を利用してログ出力するにはkomapper-slf4jモジュールをGradleの依存関係の宣言に含めます。

val komapperVersion: String by project

dependencies {
    runtimeOnly("org.komapper:komapper-slf4j:$komapperVersion")
}

また、SLF4Jの実装として Logback を使う場合はlogback-classicモジュールも依存関係の宣言に含めます。

val komapperVersion: String by project

dependencies {
    runtimeOnly("org.komapper:komapper-slf4j:$komapperVersion")
    runtimeOnly("ch.qos.logback:logback-classic:1.2.5")
}

LogbackでSQLのログ出力をする場合の設定例

次のようなlogback.xmlをsrc/main/resourcesの下に配置すると、バインド変数?が含まれた形式のSQLがコンソールに出力されます。

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <logger name="org.komapper.SQL" level="debug"/>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

バインド変数を引数で置換した形式のSQLをコンソールに出力したい場合は以下のように設定してください。

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <logger name="org.komapper.SQL_WITH_ARGS" level="trace"/>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
Last modified January 10, 2022: Prepare English contents (f426de7)