SpringBoot整合Slf4j+logback日志框架


一、Slf4j簡單介紹與優勢

1、介紹

  Slf4j的全稱是Simple Loging Facade For Java(Java簡單日志門面),它僅僅是一個為Java程序提供日志輸出的統一接口,並不是一個具體的日志實現方案,就比如JDBC一樣,只是一種規則而已。所以單獨的Slf4j是不能工作的,必須搭配其他具體的日志實現方案,比如apache的org.apache.log4j.Logger,jdk自帶的java.util.logging.Logger等。

 

2、優勢

  • 解耦客戶端

  Slf4j只是一種接口,它本身並不關心你底層使用的是什么日志實現方案,所以它支持各種日志實現方案。簡單的說,只要我們在類庫中使用Slf4j打日志,那么底層使用什么日志實現方案是使用者決定的,怎么決定?依靠配置文件和jar庫。

  • 提高效率

  Slf4j打印日志使用了{}占位符,這樣就不會有字符串拼接操作,減少了無用ring對象的數量,節省了內存,也提高了時間效率,同時編碼更加方便。

 3、log level

  Slf4j有四個級別的log level可供選擇,級別從上到下由低到高,優先級高的將被打印出來。

  • Debug
    簡單來說,對程序調試有利的信息都可以debug輸出

  • info
    對用戶有用的信息

  • warn
    可能會導致錯誤的信息

  • error
    顧名思義,發生錯誤的地方

 

二、SpringBoot整合Slf4j+logback

  logback和log4j以及log4j2三者,推薦使用logback,因為logback的效率顯著高於log4j,而且logback也是Springboot推薦並且默認使用的日志系統。

1、配置依賴

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </dependency>

2、配置logback

在  src\main\resources 路徑下創建logback.xml配置文件。

<?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>

 

3、配置文件日志

系統日志全部寫在一個文件會導致文件越來越大,這時候可以用文件日志來切分控制台日志,在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}來定義精確到分的日志切分方式。

 

三、Springboot應用使用Slf4j+logback

示例:

@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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM