[Compose Multiplatform] 將 Log 輸出至檔案 示範 (logback)

加入套件依賴

在 build.gradle.kts 的 dependencies 加入套件依賴:
    
dependencies {
    implementation("ch.qos.logback:logback-classic:1.4.11")
    implementation("io.github.oshai:kotlin-logging-jvm:5.0.0")
}
    

寫入 log

在每個要寫 log 的類別中加入下面這行來建立日誌紀錄器:
    
import io.github.oshai.kotlinlogging.KotlinLogging

private val logger = KotlinLogging.logger {}
    

有以下這些方法可以輸出 log:
	
logger.trace { "trace" }
logger.debug { "debug" }
logger.info { "info" }
logger.warn { "warn" }
logger.error { "error" }


try {
    throw Exception("test exception")
} catch (e: Exception) {
    logger.error(e) { "error" }
}
    

輸出範例:

將 Log 寫入檔案

上面的動作只是將 log 輸出到指令視窗中,那要怎麼寫到檔案呢?對於 logback 來說輸出 log 的方式是依照 logback.xml 和 logback-test.xml 檔案定義的格式來輸出的,所以我們只要建立 logback.xml ,並在檔案中設定即可,下面提供一個筆者寫的範例設定檔:
    
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 預設輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
        </encoder>
    </appender>

    <property name="LOGS" value="./logs"/>
    <property name="APP_NAME" value="ruyut"/>

    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder charset="UTF-8">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOGS}/${APP_NAME}-%d{yyyyMMdd}-%i.log</fileNamePattern>
            <maxHistory>90</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>


    <!-- 定義日誌紀錄等級 -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
    <root level="debug">
        <appender-ref ref="RollingFile"/>
    </root>

</configuration>
    

此 logback.xml 檔案的路徑位於 \src\main\resources\logback.xml

依照上面的 logback.xml 設定檔,輸出的 log 檔案位於專案根目錄的 logs 資料夾內,範例檔名為: ruyut-20231104-0.log

延伸閱讀:
Spring boot 最簡單寫 Log 教學(輸出到檔案)

參考資料:
GitHub - kotlin-logging
Logback configuration

留言