SpringBoot使用日志


1、日志框架

日志門面 日志實現
JCL、SLF4J、jboss-logging Log4j、JUL、Log4j2、Logback

日志門面:SLF4J

日志實現:Logback

SpringBoot:底層是Spring框架,Spring框架默認是用JCL;

SpringBoot選用SLF4J和Logback.

2、SLF4J使用

以后開發的時候,日志記錄。日志記錄方法的調用,不應直接調用日志的實現類,而是調用日志抽象層的方法。

應該給系統里倒入slf4j的jar和logback的實現jar。

1   import org.slf4j.Logger;
2   import org.slf4j.LoggerFactory;
3 4   public class HelloWorld {
5     public static void main(String[] args) {
6       Logger logger = LoggerFactory.getLogger(HelloWorld.class);
7       logger.info("Hello World");
8     }
9   }

每一個日志的實現框架都有自己的配置文件。使用slf4j以后,配置文件還是做成日志實現框自己本身的配置文件

3、遺留問題

框架A:

(slf4j+logback):Spring(commons-logging)、Hibernate(jboss-logging)、Mybatis、xxx

統一:統一使用slf4j+logback

如何讓系統中的日志統一到slf4j:

1、將系統中的其它日志框架先排除出去

2、用中間包來替換所有的日志框架

3、我們倒入slf4j的其它實現

 

日志級別:

trace > debug > info > warn > error

 

The following example shows potential(默認的、潛在的) logging settings in application.properties:

1   logging.level.root=WARN
2   logging.level.org.springframework.web=DEBUG
3   logging.level.org.hibernate=ERROR

 

日志在yml中的相關配置:

 logging.level.com.itcast=info
 logging.path=日志保存的位置
 logging.file=D:/logging.log 日志的文件包含路徑
 logging.pattern.console=console: %d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n 控制台輸出日志的格式
 logging.pattern.file: %d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n 在指定文件中日志輸出格式

 

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.

 

Depending on your logging system, the following files are loaded:

使用springboot加載不同方式的日志實現方式,需要使用的配置文件名稱如下,存放位置在項目根目錄下舉例logback.xml

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

logback.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2   <!--
 3   scan:當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。
 4   scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒當scan為true時,此屬性生效。默認的時間間隔為1分鍾。
 5   debug:當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。
 6   -->
 7   <configuration scan="false" scanPeriod="60 seconds" debug="false">
 8       <!-- 定義日志的根目錄 -->
 9       <property name="LOG_HOME" value="/app/log" />
10       <!-- 定義日志文件名稱 -->
11       <property name="appName" value="atguigu-springboot"></property>
12       <!-- ch.qos.logback.core.ConsoleAppender 表示控制台輸出 -->
13       <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
14           <!--
15           日志輸出格式:
16               %d表示日期時間,
17               %thread表示線程名,
18               %-5level:級別從左顯示5個字符寬度
19               %logger{50} 表示logger名字最長50個字符,否則按照句點分割。 
20               %msg:日志消息,
21               %n是換行符
22           -->
23           <layout class="ch.qos.logback.classic.PatternLayout">
24               <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
25           </layout>
26       </appender>
27 28       <!-- 滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件 -->  
29       <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
30           <!-- 指定日志文件的名稱 -->
31           <file>${LOG_HOME}/${appName}.log</file>
32           <!--
33           當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名
34           TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動。
35           -->
36           <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
37               <!--
38               滾動時產生的文件的存放位置及文件名稱 %d{yyyy-MM-dd}:按天進行日志滾動 
39               %i:當文件大小超過maxFileSize時,按照i進行文件滾動
40               -->
41               <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
42               <!-- 
43               可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每天滾動,
44               且maxHistory是365,則只保存最近365天的文件,刪除之前的舊文件。注意,刪除舊文件是,
45               那些為了歸檔而創建的目錄也會被刪除。
46               -->
47               <MaxHistory>365</MaxHistory>
48               <!-- 
49               當日志文件超過maxFileSize指定的大小是,根據上面提到的%i進行日志文件滾動 注意此處配置SizeBasedTriggeringPolicy是無法實現按文件大小進行滾動的,必須配置timeBasedFileNamingAndTriggeringPolicy
50               -->
51               <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
52                   <maxFileSize>100MB</maxFileSize>
53               </timeBasedFileNamingAndTriggeringPolicy>
54           </rollingPolicy>
55           <!-- 日志輸出格式: -->     
56           <layout class="ch.qos.logback.classic.PatternLayout">
57               <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
58           </layout>
59       </appender>
60 61       <!-- 
62           logger主要用於存放日志對象,也可以定義日志類型、級別
63           name:表示匹配的logger類型前綴,也就是包的前半部分
64           level:要記錄的日志級別,包括 TRACE < DEBUG < INFO < WARN < ERROR
65           additivity:作用在於children-logger是否使用 rootLogger配置的appender進行輸出,
66           false:表示只用當前logger的appender-ref,true:
67           表示當前logger的appender-ref和rootLogger的appender-ref都有效
68       -->
69       <!-- hibernate logger -->
70       <logger name="com.atguigu" level="debug" />
71       <!-- Spring framework logger -->
72       <logger name="org.springframework" level="debug" additivity="false"></logger>
73 74 75 76       <!-- 
77       root與logger是父子關系,沒有特別定義則默認為root,任何一個類只會和一個logger對應,
78       要么是定義的logger,要么是root,判斷的關鍵在於找到這個logger,然后判斷這個logger的appender和level。 
79       -->
80       <root level="info">
81           <appender-ref ref="stdout" />
82           <appender-ref ref="appLogAppender" />
83       </root>
84   </configuration> 

 

You need to either use logback-spring.xml or define a logging.config property.

使用logging-spring.xml這種方式,可以根據不同配置環境配置日志的輸出方式。

 1  <springProfile name="staging">
 2       <!-- configuration to be enabled when the "staging" profile is active -->
 3   </springProfile>
 4  5   <springProfile name="dev, staging">
 6       <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
 7   </springProfile>
 8  9   <springProfile name="!production">
10       <!-- configuration to be enabled when the "production" profile is not active -->
11   </springProfile>

案例:

1 <layout class="ch.qos.logback.classic.PatternLayout">
2      <springProfile name="dev">
3           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
4       </springProfile>
5   </layout>

 --------------------------------------------------------------------------------------------------------------------------------------------------------

相關文檔網頁支持:

1 1、https://docs.spring.io/spring-boot/docs/1.5.20.RELEASE/reference/htmlsingle/#howto-logging
3 2、https://www.slf4j.org/manual.html
5 3、https://www.slf4j.org/legacy.html


免責聲明!

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



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