Log4j2內建的Level
等級由高至低順序如下。
高---------------------------------------低
FETAL > ERROR > WARN > INFO > DEBUG > TRACE
每個Level
有對應的intLevel
整數值,數值越小等級越高,數值越大等級越低。
Level | intValue | 用途 |
---|---|---|
OFF | 0 | 不輸出任何日誌 |
FETAL | 100 | 造成應用程式停止的日誌 |
ERROR | 200 | 造成應用程式錯誤的日誌 |
WARN | 300 | 可能導致錯誤的日誌 |
INFO | 400 | 一般資訊的日誌 |
DEBUG | 500 | 除錯資訊的日誌 |
TRACE | 600 | 更細的除錯資訊,通常用來追蹤程式流程的日誌 |
ALL | Integer.MAX_VALUE | 輸出所有日誌 |
Logger輸出的等級大於等於Logger設定的等級時才會輸出訊息。
請見下面範例。
下面為在Spring Boot專案類別中使用Logger的各等級輸出。Logger設定未修改,未添加任何log4j2的配置檔(例如log4j.propperties
),Spring Boot預設的Logger等級為INFO
。
package com.abc.demo.service;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
private static final Logger log = LogManager.getLogger(DemoService.class);
public void logTest() {
Level level = log.getLevel(); // INFO
System.out.println("Logger name:" + log.getName());
System.out.println("LEVEL name:" + level.name());
System.out.println("LEVEL intLevel:" + level.intLevel());
log.fatal("FATAL"); // 印出
log.error("ERROR"); // 印出
log.warn("WARN"); // 印出
log.info("INFO"); // 印出
log.debug("DEBUG");
log.trace("TRACE");
}
}
執行結果如下,可以看到僅Logger輸出等級大於等於INFO
的才會被印出。
Logger name:com.abc.demo.service.DemoService
LEVEL name:INFO
LEVEL intLevel:400
2019-09-01 21:51:29.116 FATAL 11868 --- [ main] c.a.d.s.DemoService : FATAL
2019-09-01 21:51:29.117 ERROR 11868 --- [ main] c.a.d.s.DemoService : ERROR
2019-09-01 21:51:29.117 WARN 11868 --- [ main] c.a.d.s.DemoService : WARN
2019-09-01 21:51:29.117 INFO 11868 --- [ main] c.a.d.s.DemoService : INFO
若在程式中把Logger的等級調整為ERROR
如下。
package com.abc.demo.service;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.Configurator;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
private static final Logger log = LogManager.getLogger(DemoService.class);
public void logTest() {
Configurator.setLevel("com.abc.demo.service.DemoService", Level.ERROR); // 改為ERROR
Level level = log.getLevel(); // ERROR
System.out.println("Logger name:" + log.getName());
System.out.println("LEVEL name:" + level.name());
System.out.println("LEVEL intLevel:" + level.intLevel());
log.fatal("FATAL"); // 印出
log.error("ERROR"); // 印出
log.warn("WARN");
log.info("INFO");
log.debug("DEBUG");
log.trace("TRACE");
}
}
執行結果如下,可以看到僅Logger輸出等級大於等於ERROR
的才會被印出。
Logger name:com.abc.demo.service.DemoService
LEVEL name:ERROR
LEVEL intLevel:200
2019-09-01 22:58:04.610 FATAL 8100 --- [ main] c.a.d.s.DemoService : FATAL
2019-09-01 22:58:04.611 ERROR 8100 --- [ main] c.a.d.s.DemoService : ERROR
此外Logger又有繼承父Logger等級的特性,這一點要同時被考慮。
參考:
沒有留言:
張貼留言