原文地址:https://blog.csdn.net/tianyaleixiaowu/article/details/73321610
Springboot默認集成的就是logback,logback相對來說是優秀於log4j的,log4j2也是參考了logback的設計。本篇就是來看看如何使用logback。
新建一個Springboot項目,勾選web就OK了,項目會自動集成logback。
控制台日志
寫一個controller測試一下:
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
import org.springframework.web.bind.annotation.GetMapping;
-
import org.springframework.web.bind.annotation.RestController;
-
-
/**
-
* Created by admin on 17/6/16.
-
*/
-
-
public class IndexController {
-
private final Logger logger = LoggerFactory.getLogger(getClass());
-
-
-
public Object index() {
-
logger.debug( "debug");
-
logger.info( "info");
-
logger.warn( "warn");
-
logger.error( "error");
-
return "success";
-
}
-
}
需要注意:Logger是slf4j包中的logger,別引用錯了。slf4j是一個工廠,可以和log4j、logback結合使用,熟悉工廠模式的自然理解。引用了logback那么Logger就會使用logback相關的方法來處理日志,引用了log4j也同理,這樣能便於我們切換日志的實際處理類,這是工廠模式的優點。不要同時引用兩個日志處理框架,這樣工廠會懵逼的。
訪問上面的controller,查看控制台打印:
2017-06-16 09:54:13.966 INFO 60356 --- [nio-8080-exec-1] c.e.demo.controller.IndexController : info
2017-06-16 09:54:13.967 WARN 60356 --- [nio-8080-exec-1] c.e.demo.controller.IndexController : warn
2017-06-16 09:54:13.967 ERROR 60356 --- [nio-8080-exec-1] c.e.demo.controller.IndexController : error
我們發現除了debug沒出來,其他的都出來了。
這是因為Springboot的日志level來控制的,根據不同的level來顯示。在哪里控制呢?正常來說,應該是由我們在resources下配置的spring-logback.xml來控制,但是我們什么都沒寫,那么他就走了Springboot默認的配置。
這里就是Springboot對logback配置的地方,base.xml里,可以看到root level=INFO,這個代表該項目默認是輸出最低為info級別的日志。然后看到有兩個append-ref,分別為console何file,這兩個分別對應上面引用的兩個include resource里的xml,每個名字對應一個處理類。
ConsoleAppender和FixedWindowRollingPolicy都是logback提供的兩個Appender處理類,Appender類代表了對日志的處理方法,這個可以自定義。系統提供了很多個Appender,基本滿足了大部分場景的需求,像Console就是輸出到控制台的,System.out.print之類的,而File的就是輸出到日志文件的。
剛才可以看到在控制台已經打印出了info及以上級別的日志了,那日志文件在哪里呢?
日志文件
file: ./logback.log

修改其他配置

file: ./logback.log
level:
com.example.demo: debug

使用自定義配置
修改日志級別
-
-
<configuration>
-
<include resource="org/springframework/boot/logging/logback/base.xml" />
-
-
<root level="WARN">
-
<appender-ref ref="CONSOLE" />
-
<appender-ref ref="FILE" />
-
</root>
-
-
-
</configuration>

按包名區分日志級別
-
-
<configuration>
-
<include resource="org/springframework/boot/logging/logback/base.xml" />
-
-
<root level="INFO">
-
<appender-ref ref="CONSOLE" />
-
<appender-ref ref="FILE" />
-
</root>
-
-
<logger name="org.springframework.web" level="INFO"/>
-
<logger name="com.example.demo" level="WARN"/>
-
</configuration>
-
-
<configuration>
-
<include resource="org/springframework/boot/logging/logback/base.xml" />
-
-
<root level="INFO">
-
<appender-ref ref="CONSOLE" />
-
<appender-ref ref="FILE" />
-
</root>
-
-
<!-- 測試環境+開發環境. 多個使用逗號隔開. -->
-
<springProfile name="test,dev">
-
<logger name="org.springframework.web" level="INFO">
-
<appender-ref ref="FILE"/>
-
</logger>
-
<logger name="com.example" level="INFO" />
-
</springProfile>
-
-
<!-- 生產環境. -->
-
<springProfile name="prod">
-
<logger name="org.springframework.web" level="ERROR">
-
<appender-ref ref="FILE"/>
-
</logger>
-
<logger name="com.example" level="ERROR" />
-
</springProfile>
-
</configuration>
按時間自動滾動的日志文件
-
<appender name="MY_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-
<Prudent>true</Prudent>
-
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
-
-
<maxHistory>30</maxHistory>
-
<totalSizeCap>3GB</totalSizeCap>
-
-
</rollingPolicy>
-
<layout class="ch.qos.logback.classic.PatternLayout">
-
<Pattern> %d{yyyy-MM-dd HH:mm:ss} -%msg%n</Pattern>
-
</layout>
-
<encoder>
-
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
-
</encoder>
-
</appender>
-
<!-- 測試環境+開發環境. 多個使用逗號隔開. -->
-
<springProfile name="test,dev">
-
<logger name="org.springframework.web" level="INFO">
-
<appender-ref ref="MY_FILE"/>
-
</logger>
-
</springProfile>
需要注意,Appender的定義要在上面,使用它的地方要在下面,不然會報錯找不到Appender。