[Day 7] 談 Ktor 紀錄 log 的方式

在我們深入修改程式之前,我們還有一個要注意的地方,那就是程式 log 的設置。

SLF4J

Ktor 框架使用 SLF4J (Simple Logging Facade for Java)這個 facade 來處理 log。有許多的 log 框架都支援 SLF4J,比方說 java.util.logging、logback、log4j……等。

如果我們沒有安裝任何支援 SLF4J 的 log 框架,那麼可能會出現以下錯誤訊息:

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.

要解決這個問題,我們只要安裝一個 log 框架就可以囉。以下我們選 logback 來作為我們的 log 框架。

logback

要安裝 logback,我們只要在 build.gradle 裡加上

    compile "ch.qos.logback:logback-classic:1.2.3"

然後重新 gradle build 就可以了

logback.xml

要調整 log 的位置和記錄的細節,我們可以看 src/main/resources/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="org.eclipse.jetty" level="INFO"/>
    <logger name="io.netty" level="INFO"/>
</configuration>

裡面將 log 放到 STDOUT,log 的文字結構為 %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

這裡就簡單的介紹Ktor 框架裡 log 的機制。至於實務上需要的規則是什麼,又如何根據實務規則調整 logback.xml,我們可以看 logback manual 來進行調整。