市場上的日誌框架
市場上的日誌框架有很多,比如JUL,JCL,Jboss-logging,logback,log4j,log4j2,slf4j等。
這些日誌主要分爲兩個部分:
- 日誌門面(日誌的抽象層):JCL,SLF4j,Jboss-logging
- 日誌實現:log4j,log4j2,logback,JUL
而在SpringBoot中,最終我們會選擇SLF4j和logback這樣的組合。
SLF4j的使用
在日常開發的時候,日誌記錄方法的調用,不應該直接調用日誌的實現類,而是調用日誌抽象層裏面的方法。
在使用SLF4j之前需要導入SLF4j的jar和logback的實現jar。
示例:
public class HelloWorld{
public static void main(String[] args){
Logger logger=LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World!!!");
}
}
但是在SpringBooot中會遇到如下問題:某個a項目使用的是slf4j+logback模式,但是項目中Spring使用的是commons-logging日誌,Hibernate使用的是Jboss-logger。所以有時候我們需要統一日誌記錄。
總結:
- 將系統中其他日誌框架先排除出去
- 用中間包來代替原來的日誌框架
- 在導入slf4j的其他實現
SpringBoot日誌關係
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
SpringBoot使用它來做日誌功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
總結:
- SpringBoot底層也是使用SLF4j和logback的方式進行日誌記錄。
- SpringBoot也會把其他的日誌文件都替換成了SLF4j。
- 也使用了中間替換包
- 如果需要引入其他的日誌框架,一定要把這個框架的默認日誌文件依賴移除掉。
示例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
日誌文件的編寫
logging.level.com.learn=trace #設置顯示日誌的等級
#不指定路徑則在當前項目下生成springboot.log日誌
#也可以指定完整的路徑
logging.file.name=E:/springboot.log
#在當前磁盤的根路徑下創建spring文件夾和裏面的log文件夾,使用spring.log作爲默認文件
logging.path=/spring/log
#在控制檯輸出日誌的格式
logging.pattern.console=%d{yyyy-mm-dd}[%thread]%-5level %logger{50} -%msg%n