Skip to content

Ktor Server でのロギング

コード例: logging

Ktor は、使用するプラットフォームに応じて、アプリケーションをロギングするためのさまざまな手段を提供します。

  • JVM では、Ktor はさまざまなロギングフレームワーク(LogbackLog4j など)のファサードとして SLF4J API を使用し、アプリケーションイベントをログに記録できるようにします。 ロギングを有効にするには、目的のフレームワークの依存関係を追加し、そのフレームワーク固有の設定を行う必要があります。

    クライアントのリクエストをログに記録するために、CallLogging プラグインをインストールして設定することもできます。

  • Native サーバーの場合、Ktor はすべてを標準出力にプリントするロガーを提供します。

JVM

ロガーの依存関係の追加

ロギングを有効にするには、目的のロギングフレームワークのアーティファクトを含める必要があります。 例えば、Logback には以下の依存関係が必要です。

Kotlin
Groovy
XML

Log4j を使用するには、org.apache.logging.log4j:log4j-coreorg.apache.logging.log4j:log4j-slf4j-impl アーティファクトを追加する必要があります。

ロガーの設定

選択したロギングフレームワークの設定方法については、そのドキュメントを参照してください。例:

例えば、Logback を設定するには、クラスパスのルート(src/main/resources など)に logback.xml ファイルを配置する必要があります。 以下の例は、ログをコンソールに出力する STDOUT アペンダーを使用した Logback 設定のサンプルです。

xml
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="trace">
        <appender-ref ref="STDOUT"/>
    </root>
    <logger name="io.netty" level="INFO"/>
</configuration>

ログをファイルに出力したい場合は、FILE アペンダーを使用できます。

xml
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>testFile.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="trace">
        <appender-ref ref="FILE"/>
    </root>
    <logger name="io.netty" level="INFO"/>
</configuration>

完全な例はこちらにあります:logging

Native

Native サーバーのログレベルを設定するには、アプリケーションの実行時に KTOR_LOG_LEVEL 環境変数に以下のいずれかの値を割り当てます。

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR

例えば、TRACE レベルを有効にすると、一部のルートが実行されない理由を特定するのに役立つルートトレースが有効になります。

コード内でのロガーへのアクセス

Logger インスタンスは、Logger インターフェースを実装するクラスによって表されます。Application.log プロパティを使用して、Application 内で Logger インスタンスにアクセスできます。例えば、以下のコードスニペットは、モジュール内でログにメッセージを追加する方法を示しています。

kotlin
import io.ktor.server.application.*

fun Application.module() {
    log.info("Hello from module!")
}

また、call.application.environment.log プロパティを使用して、ApplicationCall から Logger にアクセスすることもできます。

kotlin
routing {
    get("/api/v1") {
        call.application.environment.log.info("Hello from /api/v1!")
    }
}

プラグインおよびファイルでのロギング

プラグインやファイル内でアプリケーションログを使用することは推奨されません。プラグインやファイルごとに個別のロガーを使用することをお勧めします。これを行うには、任意のロギングライブラリを使用できます。

マルチプラットフォームプロジェクトの場合は、KtorSimpleLogger クラスを使用できます。

kotlin
package com.example

import io.ktor.server.application.*
import io.ktor.server.request.*
import io.ktor.util.logging.*

internal val LOGGER = KtorSimpleLogger("com.example.RequestTracePlugin")

val RequestTracePlugin = createRouteScopedPlugin("RequestTracePlugin", { }) {
    onCall { call ->
        LOGGER.trace("Processing call: ${call.request.uri}")
    }
}