您好,登錄后才能下訂單哦!
這篇文章主要介紹如何使用SpringBoot集成slf4j日志配置,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
slf4j,即(Simple Logging Facade for Java,簡單門面日志)。它是對所有日志框架制定的一種規范、標準、接口,并不是一個框架的具體的實現,它只服務于各種各樣的日志系統。
slf4j提供了統一的記錄日志的接口,對不同日志系統的具體實現進行了抽象化,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過綁定具體的日志系統來實現。在項目中使用了slf4j記錄日志,并且綁定了log4j(pom.xml中配置了相應的jar包依賴),則日志會以log4j的風格輸出;后期需要改為以logback的風格輸出日志,只需要將jar包log4j替換成logback即可,根本不需要修改日志文件的代碼。
首先看下日志打印,如下,在啟動類中引入Logger日志記錄:
@SpringBootApplication public class SpringbootSlf4jApplication { private static final Logger logger = LoggerFactory.getLogger(SpringbootSlf4jApplication.class); public static void main(String[] args) { logger.info("===============項目啟動了==============="); SpringApplication app = new SpringApplication(SpringbootSlf4jApplication.class); app.run(args); logger.info("===============啟動成功了==============="); } }
日志信息:
2020-03-21 11:28:18.017 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============項目啟動了===============
2020-03-21 11:28:18.447 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - Starting SpringbootSlf4jApplication on DESKTOP-V8RSTKO with PID 17476
2020-03-21 11:28:18.447 [main] DEBUG com.hl.magic.slf4j.SpringbootSlf4jApplication - Running with Spring Boot v2.1.8.RELEASE, Spring v5.1.9.RELEASE
2020-03-21 11:28:18.447 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - No active profile set, falling back to default profiles: default
2020-03-21 11:28:19.077 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8080 (http)
2020-03-21 11:28:19.087 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.097 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
2020-03-21 11:28:19.097 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.24]
2020-03-21 11:28:19.157 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2020-03-21 11:28:19.157 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 680 ms
2020-03-21 11:28:19.287 [main] INFO o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2020-03-21 11:28:19.387 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.397 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-03-21 11:28:19.397 [main] INFO org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2020-03-21 11:28:19.407 [main] INFO org.springframework.web.servlet.DispatcherServlet - Completed initialization in 10 ms
2020-03-21 11:28:19.410 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
2020-03-21 11:28:19.410 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - Started SpringbootSlf4jApplication in 1.323 seconds (JVM running for 2.024)
2020-03-21 11:28:19.410 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============啟動成功了===============
getLogger(xxxxxxx.class);這個方法將當前所在的類作為入參傳遞,輸出日志就會顯示對應的xxx類名。這樣聲明的好處就是方便定位日志,準確編寫class信息能夠提供快速定位日志的效率。
然鵝,SpringBoot內部雖然提供了slf4j,但是日志記錄是需要根據項目實地需要進行配置后,才能發揮它的最大功效。OK,接下來一起來了解下SpringBoot項目集成slf4j日志的配置。
pom.xml中日志依賴配置如下:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency>
SpringBoot框架內部已經集成slf4j,在使用時,根據項目實地需要,還是須對slf4j進行指定配置。
application.yml文件是SpringBoot的一個及其重要、核心的配置文件。yml 文件的層次感較強且直觀,但對格式要求比較高,英文冒號后面必須要有一個空格,如果換行配置子項,須定格輸入兩個空格后再進行配置,否則項目估計無法啟動,而且也不報錯。本文測試項目的application.yml中日志配置如下:
logging: config: /HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/src/main/resources/logback.xml level: com.hl.magic: trace
注意:
【1】這里logback.xml的配置不同于一般日志配置;
因為在單獨的一個SpringBoot工程中,配置config標簽處為:locbak.xml即可;
這里在SpringBoot工程的一個子Module中集成日志配置,因此config標簽處,設置為絕對路徑。
【2】logging.config是用來指定項目啟動的時候,讀取哪個配置文件,這里指定的是日志配置文件,即子module項目根路徑下的 logback.xml文件,該文件是日志的主要配置信息。
【3】level用來配置指定包的路徑下應用程序的日志記錄,及其日志級別。
logging.level用來指定具體的包中應用程序日志的輸出級別。上面的配置表示com.hl.magic包下的所有日志輸出級別為 trace,會將操作數據庫的 sql 打印出來,開發時設置成 trace 方便定位問題,在生產環境上,將這個日志級別再設置成 error 級別即可。
日志常用的五個級別,根據嚴重程度由低到高,依次為:debug(調試 ) < info(消息) < warn(警告) < error(錯誤) < fatal(嚴重錯誤)。通常可以根據實際所需要的顆粒度的大小選擇其中的幾個,當前常用debug,info,warn,error4個級別。
在引入日志配置后,需要制定日志的配置文件內容,這樣系統運行后,根據定制化需求才能輸出我們所需的指定日志記錄信息。
本文測試用例的日志配置內容logback.xml文件,詳細內容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/> <!-- 定義日志格式 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/> <!-- 控制臺輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/SpringBoot-Slf4j_%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天數--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志輸出級別 --> <logger name="org.springframework" level="INFO"/> <logger name="com.hl.magic" level="INFO"/> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration>
有上邊可以看出,我們可以輕松的在logback.xml中定義日志輸出的格式、路徑、控制臺輸出格式、文件大小、保存時長等內容。接下來,就這些內容進行分析。
logback.xml文件中日志存儲路徑定義:
<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/>
分析:
首先,定義日志的名稱:LOG_HOME;
其次,設置輸出value定義為日志的存儲路徑,日志都會存儲在該路徑下。
注意:這里勿在logback文件中使用相對路徑,不管是 windows 系統還是 Linux 系統,日志存儲的路徑必須要是絕對路徑。
<!-- 定義日志格式 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
分析:
首先,定義日志格式的名稱:LOG_PATTERN
其次,設置日志的具體格式value。
"%d" 表示日期(也可以使用"%date");
"%-5level" 表示級別從左顯示5個字符寬度;
"%thread" 表示線程名;
"%-30.30logger{30}" 表示如果logger的名稱小于30,就“-”指定左對齊;如果其名稱長于30字符,就從左邊較遠輸出的字符截掉,保持logger的名字長度最終限制為30個字符;
"%msg" 表示日志消息,`%n` 是換行符。
<!-- 定義控制臺輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 變量引入 --> <pattern>${LOG_PATTERN}</pattern> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>--> </encoder> </appender>
分析:
使用 <appender>標簽設置控制臺輸出(`class="ch.qos.logback.core.ConsoleAppender"`)的配置,定義為 “CONSOLE”。使用引入變量的方式: <pattern>${LOG_PATTERN}</pattern>引進來即可。引入上面定義好的輸出格式(LOG_PATTERN)來輸出
這里,也可以直接配置格式化輸出結果的方式,不過體力工作。
在<appender>標簽內定義一個名為 “FILE” 的文件參數配置。主要是配置日志文件的輸出文件名、日志文件保留時間、日志文件保存的路徑和日志的輸出格式、及單個日志文件存儲的大小。
<!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}</FileNamePattern> <!--日志文件保留天數--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 變量引入 --> <pattern>${LOG_PATTERN}</pattern> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> --> </encoder> <!--日志文件最大的存儲--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender>
分析:
這里,根據前面配置的日志變量,引入到配置日志文件的輸出文件名、日志文件保留時間、日志文件保存的路徑和日志的輸出格式、及單個日志文件存儲的大小的各個標簽項即可。
在完成前邊的準備工作后,最后來定義一下日志的輸出級別:
<!-- 日志輸出級別 --> <logger name="org.springframework" level="ERROR"/> <logger name="com.hl.magic" level="ERROR"/> <root level="ERROR"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root>
分析:
在<logger>標簽中來項目默認的日志輸出級別,這里定義級別為ERROR(用在生產環境中),然后針對ERROR級別的日志,使用<root>引用上面定義好的控制臺日志輸出和日志文件的參數。這樣 logback.xml 文件中的配置就設置完了。
注意:
<logger>標簽并不是只能添加一個,我們還可以指定項目特定包路徑的日志輸出級別。
本文測試類配置日志輸出級別為:DEBUG,使用最低日志輸出級別,確保后邊測試時能夠打印出所有測試項。如果需要改變日志級別就在上面配置內容修改即可。
在程序中,一般使用 Logger(注意引jar包為slf4j) 對象來打印出一些日志信息,可以指定打印出的日志級別,也支持占位符。
定義一個測試類:LoggerItemController.java
/** * 日志輸出測試的controller */ @RestController @RequestMapping("/loggerItem") public class LoggerItemController { private static final Logger logger = LoggerFactory.getLogger(LoggerItemController.class); @GetMapping("/logInfo") public ResponseMessage logTest(){ logger.debug("=====>測試日志debug級別打印<===="); logger.info("=====>測試日志info級別打印<====="); logger.error("=====>測試日志error級別打印<===="); logger.warn("=====>測試日志warn級別打印<====="); // 使用占位符打印出一些參數信息 String csdn = "https://blog.csdn.net/qq_27706119"; String git = "https://github.com/JohnnyHL"; logger.info("======>AndOne丶的CSDN博客:{};AndOne丶的GitHub地址:{};", csdn, git); return new ResponseMessage(ResponseStatus.SUCCESS.getStatus(),ResponseStatus.SUCCESS.getMessage()); } }
先啟動項目,瀏覽器訪問地址:127.0.0.1:8080/loggerItem/logInfo
查看控制臺打印信息:
=====>測試日志debug級別打印<====
=====>測試日志info級別打印<=====
=====>測試日志error級別打印<====
=====>測試日志warn級別打印<=====
======>AndOne丶的CSDN博客:https://blog.csdn.net/qq_27706119;AndOne丶的GitHub地址:https://github.com/JohnnyHL;
日志的輸出級別中,DEBUG為最低級別,這樣能打印出全部信息。如果提高日志輸出級別,比如選擇INFO。則DEBUG 這條記錄將不會被打印出來,這個大家可自行測試即可。同時,查看下前邊配置的日志存儲路徑:“/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log”目錄,該目錄下記錄了項目啟動,以及后面生成的所有日志記錄。在日常開發過程中,項目部署后,可通過查看日志文件來定位問題。
以上是“如何使用SpringBoot集成slf4j日志配置”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。