Slf4j的全稱是Simple Loging Facade For Java(Java簡單日誌門面),它僅僅是一個爲Java程序提供日誌輸出的統一接口,並非一個具體的日誌實現方案,就好比JDBC同樣,只是一種規則而已。因此單獨的Slf4j是不能工做的,必須搭配其餘具體的日誌實現方案,好比apache的org.apache.log4j.Logger,jdk自帶的java.util.logging.Logger等。java
Slf4j只是一種接口,它自己並不關心你底層使用的是什麼日誌實現方案,因此它支持各類日誌實現方案。簡單的說,只要咱們在類庫中使用Slf4j打日誌,那麼底層使用什麼日誌實現方案是使用者決定的,怎麼決定?依靠配置文件和jar庫。sql
Slf4j打印日誌使用了{}佔位符,這樣就不會有字符串拼接操做,減小了無用ring對象的數量,節省了內存,也提升了時間效率,同時編碼更加方便。apache
Slf4j有四個級別的log level可供選擇,級別從上到下由低到高,優先級高的將被打印出來。app
Debug
簡單來講,對程序調試有利的信息均可以debug輸出編碼
info
對用戶有用的信息spa
warn
可能會致使錯誤的信息.net
error
顧名思義,發生錯誤的地方hibernate
logback和log4j以及log4j2三者,推薦使用logback,由於logback的效率顯著高於log4j,並且logback也是Springboot推薦而且默認使用的日誌系統。線程
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency>
在 src\main\resources 路徑下建立logback.xml配置文件。debug
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="/home" /> <!--控制檯日誌, 控制檯輸出 --> <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}/TestWeb.log.%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> <!-- show parameters for hibernate sql 專爲 Hibernate 定製 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日誌輸出級別 --> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE"/> </root> </configuration>
系統日誌所有寫在一個文件會致使文件愈來愈大,這時候能夠用文件日誌來切分控制檯日誌,在logback.xml中添加:
<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>/usr/local/log/app.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern> <!-- keep 30 days' worth of history --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern> </encoder> </appender>
注:
logback.%d{yyyy-MM-dd}.log定義了日誌的切分方式——把每一天的日誌歸檔到一個文件中,30表示只保留最近30天的日誌,以防止日誌填滿整個磁盤空間。同理,可使用%d{yyyy-MM-dd HH:mm:ss SSS}來定義精確到分的日誌切分方式。
@RestController @RequestMapping("/Test") public class HelloWorld { @Autowired private HelloService helloService; private final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);
@GetMapping("/hello") public String sayHello(){ logger.info("hello Sfl4j + logback......"); return helloService.sayHello(); } }
參考文獻
https://blog.csdn.net/u012806787/article/details/78725259