KtorはSLF4Jをロギングに利用しています。
ロギングプロバイダーを追加しない場合、アプリケーション起動時に以下のようなメッセージが出ます。
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
これらのwarningメッセージを取り除き、また何がアプリケーションで起きているかをより理解するため、 プロバイダーを追加することでロギングのセットアップをすることができます。
プロバイダーはJavaのServiceLoaderメカニズムを使っています。 そのためコード内で何かしらをすることなしに、自動で発見され追加されます。
SLF4Jプロバイダーとして、log4jの後継であるlogbackを使うことができます。
Gradleのbuild.gradle
またはbuild.gradle.kts
は以下のようになります:
compile("ch.qos.logback:logback-classic:1.2.3")
Mavensのpom.xml
:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
追加し、アプリケーションを起動すると、IntelliJ IDEAのRunページにてロギングメッセージを見ることができることができます。 しかし、これらのロギングメッセージはさらに有益にする余地が残っています。
デフォルトのロギングで十分ではない場合、logback.xml
かlogback-test.xml
(プライオリティはこちらのほうが高いです)ファイルを
src/main/resources
フォルダに置き、ロギングの調整を行うことができます。
例えば:
<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="org.eclipse.jetty" level="INFO"/>
<logger name="io.netty" level="INFO"/>
</configuration>
これを追加した後に、アプリケーションを停止し再度起動しブラウザでlocalhost:8080を見ると、 IDEAのrunページで以下のようなログメッセージを見ることができるはずです:
2017-05-29 23:08:12.926 [nettyCallPool-4-1] TRACE ktor.application - 200 OK: GET - /
リクエストのログを出力するにはCall Logging Featureをインストールすればよいです。
どのようにlogback.xml
ファイルを変更しログ出力形式を変更すればよいかを理解するには、logbackマニュアルを見てください。
ApplicationEnvironment
インターフェースはlog
プロパティを持っています。
ApplicationCall
においてcall.application.environment.log
を使ってアクセスすることができます。