市面上的日志框架
日志門面 (日志的抽象層) | 日志門面 (日志的抽象層) |
---|---|
JCL(Jakarta Commons Logging SLF4j(Simple Logging Facade for Java) jboss-loggi | JUL(java.util.logging) Log4j Log4j2 Logback |
左邊選一個門面(抽象層);右邊選一個實現
SLF4J使用
系統中使用SLF4j
- 以后開發的時候,日志記錄方法的調用,不應該來直接調用日志的實現類,而是調用日志抽象層里面的方法;
- 給系統導入slf4j和logback的實現jar
import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class HelloWorld {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger(HelloWorld.class);logger.info("Hello World");} }
每個日志的框架都有自己的配置文件。使用slf4j以后,配置文件還是做成日志實現框架自己本身的配置文件
日志兼容問題?
- 項目依賴的框架使用不同的日志
- 當項目使用多種日志API時,可以同一適配到SLF4J,中間使用SLF4J或者第三方提供的日志適配器,從而適配到SLF4J,SLF4J在底層享用的一個日志框架來進行日志系統的實現,從而達到多種日志的統一實現。
如何統一日志,將所有的日志都統一到SLF4J
- 將系統中其他日志框架先排除出去;
- 用中間包來替換原有的日志框架(適配器的類名和包名與替換的被日志框架一致);
- 我們導入slf4j其他的實現
底層依賴關系
- SpringBoot底層也是使用slf4J和logback的方式進行日志記錄
- SpringBoot也把其他的日志替換成了slf4j
- 當我們引入其他框架的時候,需要刪除這個框架依賴的日志框架
日志的使用
默認配置
//記錄器Logger logger = LoggerFactory.getLogger(getClass());@Testpublic void contextLoads() {//System.out.println();//日志的級別;//由低到高 trace<debug<info<warn<error//可以調整輸出的日志級別;日志就只會在這個級別以以后的高級別生效logger.trace("這是trace日志...");logger.debug("這是debug日志...");//SpringBoot默認給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認規定的級別;root級別logger.info("這是info日志...");logger.warn("這是warn日志...");logger.error("這是error日志...");}
日志輸出格式:%d表示日期時間,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%logger{50} 表示logger名字最長50個字符,否則按照句點分割。 %msg:日志消息,%n是換行符-->%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
SpringBoot修改日志的默認設置
# 也可以指定一個包路徑 logging.level.com.xxx=error
logging.level.root=error#logging.path=
# 不指定路徑在當前項目下生成springboot.log日志
# 可以指定完整的路徑;
#logging.file=G:/springboot.log# 在當前磁盤的根路徑下創建spring文件夾和里面的log文件夾;使用 spring.log 作為默認文件
logging.path=/spring/log# 在控制臺輸出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志輸出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
logging.file | logging.path | Example | Description |
---|---|---|---|
(none) | (none) | ? | 只在控制臺輸出 |
指定文件名 | (none) | my.log | 輸出日志到my.log文件 |
(none) | 指定目錄 | /var/log | 輸出到指定目錄的 spring.log 文件中 |
?指定配置
- 給類路徑下放上每個日志框架的自己的配置文件即可
- SpringBoot就不需要使用其他配置了
- logback.xml:直接被日志框架識別
- logback-spring.xml:日志框架就不直接加載日志配置項,由SpringBoot解析日志配置,可以使用SpringBoot的高級Profile功能
- 如果使用logback.xml作為日志的配置文件,還需要使用profile功能,否則會報錯
Logging System | Customization |
---|---|
Logback | logback-spring.xml ,?logback-spring.groovy ,?logback.xml ?or?logback.groovy |
Log4j2 | log4j2-spring.xml ?or?log4j2.xml |
JDK (Java Util Logging) | logging.properties |
?