加入套件依賴
在 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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com