# SLF4J基礎介紹 ### 簡介 &nbsp;&nbsp;什麼是SLF4J? Simple Logging Facade for Java是Java中的紀錄檔工具。 &nbsp;&nbsp;SLF4J 的作者就是 log4j 的作者 Ceki Gülcü,他宣稱 SLF4J 比 log4j 更有效率,而且比 Apache Commons Logging (JCL) 簡單、穩定。 &nbsp;&nbsp;為什麼工程師要撰寫 Log?因為 Log 可以用來追蹤錯誤發生的起點與整個過程。只要在開發時妥善加入適當的 Log,當錯誤發生時,就能更快速地還原問題情境,加快Debug的速度。 網址:https://zh.wikipedia.org/zh-tw/SLF4J ---- ### 如何引入? 在class檔直接加入引用 ```java= import lombok.extern.slf4j.Slf4j; @Slf4j ``` ---- ### 引入後如何在專案中產生log檔? 在src/main/resources底下建立一個logback-spring.xml ```java= <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 設定 log 檔儲存路徑 --> <property name="LOG_PATH" value="logs" /> <property name="LOG_FILE" value="${LOG_PATH}/my.log" /> <property name="MAX_FILE_SIZE" value="10MB" /> <property name="MAX_HISTORY" value="7" /> <!-- Console 輸出 --> <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 檔案輸出,每天輪替 --> <appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天產一個新的 log 檔 --> <fileNamePattern>${LOG_PATH}/my-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 設定 root logger --> <root level="INFO"> <appender-ref ref="Console" /> <appender-ref ref="FileAppender" /> </root> </configuration> ``` ![image](https://hackmd.io/_uploads/HyNxR1u4lx.png) (圖1) 在專案的底下會出現一個logs的資料夾 ![image](https://hackmd.io/_uploads/ByBfR1dNxx.png) (圖2) logs資料夾裡面會有一個剛剛命名為my.log的檔案 ---- ### 認識Log的級別與意義 以下提幾個比較常見的。 | 種類 | 意思 | | -------- | -------- | | DEBUG | 有關系統運作開始 | | INFO | 資訊訊息(例如啟動成功、使用者登入、傳入參數) | | WARN | 警訊(可能發生問題,但系統仍可繼續運作) | | ERROR | 嚴重發生錯誤(已發生錯誤,需修正,但不一定導致系統崩潰) | ### 撰寫範例 ```java= import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jTest { private static final Logger logger = LoggerFactory.getLogger(Slf4jExample.class); public static void main(String[] args) { logger.info("應用程式開始執行"); int a = 10, b = 0; try { int result = a / b; logger.debug("結果是:{}", result); } catch (ArithmeticException e) { logger.error("計算錯誤:除以零", e); } logger.warn("這是一個警訊"); logger.info("應用程式結束"); } } ``` ---- ### 總結 &nbsp;&nbsp;以上就是SLF4J的簡單介紹,前置作業完成後,就可以開始撰寫Log啦~ ---- > 歡迎隨意引用或拷貝,若有涉及侵權概不負責。