Ktor Server でのロギング
コード例: logging
Ktor は、使用するプラットフォームに応じて、アプリケーションをロギングするためのさまざまな手段を提供します。
- JVM では、Ktor はさまざまなロギングフレームワーク(Logback や Log4j など)のファサードとして SLF4J API を使用し、アプリケーションイベントをログに記録できるようにします。 ロギングを有効にするには、目的のフレームワークの依存関係を追加し、そのフレームワーク固有の設定を行う必要があります。
クライアントのリクエストをログに記録するために、CallLogging プラグインをインストールして設定することもできます。
- Native サーバーの場合、Ktor はすべてを標準出力にプリントするロガーを提供します。
JVM
ロガーの依存関係の追加
ロギングを有効にするには、目的のロギングフレームワークのアーティファクトを含める必要があります。 例えば、Logback には以下の依存関係が必要です。
Log4j を使用するには、org.apache.logging.log4j:log4j-core と org.apache.logging.log4j:log4j-slf4j-impl アーティファクトを追加する必要があります。
ロガーの設定
選択したロギングフレームワークの設定方法については、そのドキュメントを参照してください。例:
例えば、Logback を設定するには、クラスパスのルート(src/main/resources など)に logback.xml ファイルを配置する必要があります。 以下の例は、ログをコンソールに出力する STDOUT アペンダーを使用した Logback 設定のサンプルです。
<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 アペンダーを使用できます。
<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 インスタンスにアクセスできます。例えば、以下のコードスニペットは、モジュール内でログにメッセージを追加する方法を示しています。
import io.ktor.server.application.*
fun Application.module() {
log.info("Hello from module!")
}また、call.application.environment.log プロパティを使用して、ApplicationCall から Logger にアクセスすることもできます。
routing {
get("/api/v1") {
call.application.environment.log.info("Hello from /api/v1!")
}
}プラグインおよびファイルでのロギング
プラグインやファイル内でアプリケーションログを使用することは推奨されません。プラグインやファイルごとに個別のロガーを使用することをお勧めします。これを行うには、任意のロギングライブラリを使用できます。
マルチプラットフォームプロジェクトの場合は、KtorSimpleLogger クラスを使用できます。
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}")
}
}