您好,登錄后才能下訂單哦!
Spring Boot與日志SLF4J的操作方法,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
市面上的日志框架:
日志門面(日志的抽象層) | 日志實現 |
---|---|
JCL(Jakarta Commons Logging)SLF4J(Simple Logging Facade for Java) Jboss-logging | Log4j JUL(java.util.logging) Log4j2 Logback |
左邊選一個門面,右邊選一個實現(加粗的是同一人所寫,Logback比Log4j更加新)
日志門面:SLF4J
日志實現:Logback
Spring Boot:底層使用Spring框架,Spring框架默認使用JCL;
Spring Boot選用SLF4J和Logback;
以后開發的時候,日志方法的調用,不應該直接調用日志的實現類,而是應該調用日志抽象層的方法
應該給系統中導入slf4j的jar包和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!"); } }
public static Logger getLogger(String name) { ILoggerFactory iLoggerFactory = getILoggerFactory(); return iLoggerFactory.getLogger(name); } public static Logger getLogger(Class<?> clazz) { Logger logger = getLogger(clazz.getName()); if (DETECT_LOGGER_NAME_MISMATCH) { Class<?> autoComputedCallingClass = Util.getCallingClass(); if (autoComputedCallingClass != null && nonMatchingClasses(clazz, autoComputedCallingClass)) { Util.report(String.format("Detected logger name mismatch. Given name: \"%s\"; computed name: \"%s\".", logger.getName(), autoComputedCallingClass.getName())); Util.report("See http://www.slf4j.org/codes.html#loggerNameMismatch for an explanation"); } } return logger; }
圖示:
每一個日志框架都有自己的配置文件格式,使用slf4j之后,仍然需要使用各日志實現框架的配置文件進行配置
同一個項目中使用了很多框架,各框架使用的日志實現肯定會出現不同,如何統一使用slf4j + logback統一進行日志輸出呢?
將系統中其他日志框架先排除出去
用中間包來替換原有的日志框架
導入slf4j的其他的實現
slf4j" title="log4j --> slf4j">
總結:
spring boot底層也使用slf4j + logback的方式實現
spring boot把其他日志都替換成了slf4j
中間替換包
轉換示例:
如果我們要引入其他框架,我們一定要排除原來的框架
SpringBoot默認幫我們配置好了日志模塊;
SpringBoot日志記錄的調用方式:
//記錄器 Logger logger = LoggerFactory.getLogger(SpringBoot03LoggingApplication.class); @Test public void contextLoads() { //System.out.println(""); //日志的級別,級別由低到高trace<debug<info<warn<error //可以調整輸出的日志級別,日志只會輸出當前級別及更高級別的日志 logger.trace("這是trace日志..."); logger.debug("這是debug日志..."); logger.info("這是info日志...");//SpringBoot默認日志級別為info(root級別),沒有指定日志級別的,默認使用root級別 logger.warn("這是warn日志..."); logger.error("這是error日志..."); }
SpringBoot修改日志的默認配置:
#日志級別配置項,可以指定到具體的包或者類 logging.level.com.qiang.springboot=debug #日志文件名,如不指定路徑,則默認生成在當前項目根目錄下 #也可以指定具體的生成路徑 #logging.file=springboot.log #logging.file=F:/WorkspaceIDEA/logs/springboot.log #日志生成路徑,在指定路徑下生成日志文件,文件默認名稱為spring.log #此設置和logging.file沖突,如果二者同時出現,則logging.file生效 logging.path=F:/WorkspaceIDEA/logs #日志輸出格式 #console指控制臺的日志格式,file指日志文件的日志格式 logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} | %thread | %-5level | %logger{50} | %msg%
logging.file | logging.path | Example | Description |
---|---|---|---|
(none) | (none) | Console only logging. | |
Specific file | (none) | my.log | Writes to the specified log file. Names can be an exact location or relative to the current directory. |
(none) | Specific directory | /var/log | Writes spring.log to the specified directory. Names can be an exact location or relative to the current directory. |
在類路徑下放每個日志框架自己的配置文件即可;SpringBoot就不使用默認的日志配置了
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 |
SpringBoot推薦使用logback-spring.xml進行配置**,因為:
logback.xml 直接就被日志框架識別了,無法使用更多的擴展特性
logback-spring.xml:日志框架就無法識別此配置文件,而由SpringBoot框架解析配置,這樣就可以使用SpringBoot的高級特性了,如springProfile特性
<springProfile name="staging"> <!-- configuration to be enabled when the "staging" profile is active --> <!-- 可以指定某段配置只在某個環境下生效,類似yml配置文件中的段 --> </springProfile> <springProfile name="dev | staging"> <!-- configuration to be enabled when the "dev" or "staging" profiles are active --> </springProfile> <springProfile name="!production"> <!-- configuration to be enabled when the "production" profile is not active --> </springProfile>
可以根據slf4j的日志適配圖,進行相關的切換
另外,如果想使用log4j2,可以使用如下的方式進行
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
關于Spring Boot與日志SLF4J的操作方法問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。