javascript
SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享
文章目錄
- 1、概述
- 1.1 說明
- 1.2 日志體系
- 1.2.1 JCL日志面門介紹
- 1.2.2 Slf4j日志面門介紹
- 2、幾種日志系統介紹:
- 2.1 Slf4j
- 2.2 Commons-logging
- 2.3 Log4j
- 2.4 Logback
- 3、日志整合
- 3.1 Slf4j整合Log4j
- 3.1.1 配置jar包依賴
- 3.1.2 添加Log4j的配置文件
- 3.2 Slf4集成Log4j2
- 3.2.1 配置jar包依賴
- 3.2.2 添加log4j2的配置文件
- 3.3 Slf4集成Logback
- 3.3.1 配置jar包依賴
- 3.3.2 添加logback的配置文件
1、概述
1.1 說明
本文主要介紹了幾種常見的日志框架 ,以及SpringMVC集成這幾種框架的實例,
相關代碼請參考: chapter-3-springmvc-logintegration
https://gitee.com/leo825/spring-framework-learning-example.git
1.2 日志體系
現在市面上有commons-logging-xx.jar、log4j-xx.jar、sl4j-api-xx.jar等各種日志框架,為了有利于各個類的日志處理方式統一,聰明的程序員們想到了使用日志面門模式的日志框架,這種面向接口的開發框架有利于維護日志處理方式統一。簡單來說,就是以前直接使用日志系統log4j、logback現在依賴使用日志框架Slf4j,這樣這兩種日志框架就可以在只改動相關配置的情況下進行自如切換。
1.2.1 JCL日志面門介紹
JCL就是Jakarta Commons Logging,這是一種日志面門模式的日志框架,JCL只提供Log接口,它的集成方案如下圖所示:
1.2.2 Slf4j日志面門介紹
由于log4j的作者覺得jcl不好用,自己又寫了一個新的接口api,那么就是slf4j。關于slf4j的集成圖如下所示
2、幾種日志系統介紹:
2.1 Slf4j
slf4j即簡單日志面門(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務于各種各樣的日志系統。按照官網說法,slf4j是一個用于日志系統的Facade,用戶可以在部署的應用中使用這種Facade支持的日志系統。
slf4j提供了統一的日志接口,可以在應用中靈活切換日志系統。
官方網站:http://www.slf4j.org/
2.2 Commons-logging
apache Commons logging就是Jakarta Commons Logging,是Apache下的一個開源項目。它提供的是一個日志接口(Interface),自身提供一個簡單的日志 文件系統,但是一般和其他日志系統結合使用。例如:Commons-Loging + Log4j組合使用。它會通過動態查找機制,在程序運行時自動找到真正使用的日志庫。springboot中就是comons-logging + logback方式作為日志實現。
官網地址:http://commons.apache.org/proper/commons-logging/
源碼地址:http://commons.apache.org/proper/commons-logging/download_logging.cgicommons-logging
2.3 Log4j
log4j即是Log For Java,是Apache的一個開源項目,是一個靈活的日志框架,我們可以通過log4j的靈活配置日志的記錄格式、記錄級別、輸出格式,而不需要動代碼
官方網站:http://logging.apache.org/log4j/1.2/
源碼分析:https://www.cnblogs.com/question-sky/p/8436366.html
2.4 Logback
logback是由log4j的創始人設計的又一個開源日志框架。
logback當前分為三個模塊:logback-core,logback- classic和logback-access。
logback-core是其它兩個模塊的基礎模塊。logback-classic是log4j的一個改良版本。logback-classic完整實現了slf4j API使你可以很方便地更換成其它日志系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能。
官方地址: http://logback.qos.ch
3、日志整合
3.1 Slf4j整合Log4j
3.1.1 配置jar包依賴
Slf4j整合Log4j需要導入jar包為:
因此需要在pom中導入以下配置,本示例使用的slf4j-log4j12版本為:1.7.25
<!-- Slf4j的核心包,只有日志的接口,并沒有實現 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j-log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j-log4j.version}</version></dependency><!-- log4j日志的具體實現 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- 橋接器,將JCL的日志輸出重定向到Slf4j中 --><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j-log4j.version}</version><scope>runtime</scope></dependency><!-- slf4j整合log4j結束 -->其中jcl-over-slf4j是將Spring中使用的JCL日志輸出重定向到Slf4j中,Spring中同時需要排除JCL的jar,配置如下所示:
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version><exclusions><!--Spring自身的日志系統是基于Commons-logging接口的,本系統采用的是Slf4j+Log4j2的組合模式,為了避免沖突,因此需要將Sping中依賴排除--><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>3.1.2 添加Log4j的配置文件
在resources目錄下新建文件log4j.proerties(不要改名字)文件,并加入一下配置
# +======================================================================+# log4j.rootLogger=${log4j.log.level},${log4j.log.target} log4j.addivity.org.apache=true # +======================================================================+# # | [target] - Console - 控制臺輸出 # +----------------------------------------------------------------------+# log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=${log4j.log.level} log4j.appender.CONSOLE.Encoding=${log4j.log.encoding} log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=${log4j.log.layout} log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern} # +======================================================================+# # | [target] - FILE - 文件輸出 # +----------------------------------------------------------------------+# log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.Threshold=${log4j.log.level} log4j.appender.FILE.Encoding=${log4j.log.encoding} log4j.appender.FILE.File=${log4j.log.dir}/runtime.log log4j.appender.FILE.Append=true log4j.appender.FILE.MaxFileSize=2048KB log4j.appender.FILE.MaxBackupIndex=10 log4j.appender.FILE.layout=${log4j.log.layout} log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}# +======================================================================+# # | log4j config - 日志級別配置 # +----------------------------------------------------------------------+# log4j.log.dir=logs/ #log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF log4j.log.level=INFO #log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET log4j.log.target=CONSOLE,FILE log4j.log.encoding=UTF-8 log4j.log.layout=org.apache.log4j.PatternLayout log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n # +======================================================================+#然后啟動,項目測試:http://localhost:8080/springmvc/log/testLog1?username=leo825
日志輸出如下所示:
3.2 Slf4集成Log4j2
3.2.1 配置jar包依賴
slf4j與log4j2整合導入的jar包為:
因此需要在pom中導入以下配置,本示例配置 log4j2 需要的依賴:使用2.8.2版本
<!-- Slf4j的核心包,只有日志的接口,整合log4j2并沒有實現 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j-log4j.version}</version></dependency><!-- 橋接器,將JCL的日志輸出重定向到Slf4j中 --><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j-log4j.version}</version><scope>runtime</scope></dependency><!-- 導入日志框架核心包與接口包 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version><scope>runtime</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version><scope>runtime</scope></dependency><!--用于slf4j與log4j2保持橋接 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version><scope>runtime</scope></dependency><!--用于解決web環境下關閉服務器時可能出現的log4j線程無法及時關閉的warn,web工程需要包含log4j-web,非web工程不需要 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j2.version}</version><scope>runtime</scope></dependency><!--使用log4j2的AsyncLogger時需要包含disruptor --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><scope>runtime</scope><version>3.4.2</version></dependency><!-- slf4j整合log4j2結束 -->3.2.2 添加log4j2的配置文件
其中所注入的jar包上已經寫了相應的注釋,然后在resources目錄下增加log4j2.xml(不要改名字)配置文件
<?xml version="1.0" encoding="UTF-8"?> <!--status:這個用于設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,你會看到log4j2內部各種詳細輸出。monitorInterval : Log4j2能夠自動檢測修改配置文件和重新配置本身,設置間隔秒數,單位是s,最小是5s. --> <Configuration status="ERROR" monitorInterval="30"><Properties><!-- 配置日志文件輸出目錄 --><Property name="LOG_HOME">/root/bubble/logs</Property><property name="ERROR_LOG_FILE_NAME">/root/bubble/logs</property></Properties><Appenders><!-- Console節點 配置控制臺日志輸出:name:指定Appender的名字.target: SYSTEM_OUT 或 SYSTEM_ERR,一般只設置默認:SYSTEM_OUT.PatternLayout: 輸出格式,不設置默認為:%m%n.--><Console name="Console" target="SYSTEM_OUT"><!-- ThresholdFilter 過濾器:控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)日志的級別: ALL< Trace < DEBUG < INFO < WARN < ERROR < FATAL < OFF。--><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /><!-- PatternLayout 日志輸出格式模板:%d{yyyy-MM-dd HH:mm:ss.SSS} 日志生成時間。%-5level 日志級別(級別從左顯示5個字符寬度)。%logger{36} 表示logger名字最長36個字符,否則按照句點分割。%L 日志輸出所在行數 日志輸出所在行數[%t] 輸出產生該日志事件的線程名%msg 日志消息%n 是換行符eg:"2017-04-17 16:04:02.312 INFO com.zte.lucene.tools.DateUtils2Joda:424 [main] - Info Message!"--><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36}:%L [%t] - %msg%n" /></Console><!-- RollingFileAppender 定義輸出滾動文件格式。(FileAppender 定義輸出到文件)name : RollingFileAppender的名字,用于與Loggers模塊的綁定fileName : 日志輸出保存的文件路徑filePattern:滿足條件后,日志輸出保存的文件路徑和名稱。(eg: 2017-04/search-2017-04-17-1.log)--><RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/search.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/search-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36}:%L [%t] - %msg%n" /><!-- Policies定義相關策略:--><Policies><!--TimeBasedTriggeringPolicy 基于時間的滾動策略:該策略主要是完成周期性的log文件封存工作。interval: integer型,指定兩次封存動作之間的時間間隔,默認是1 hour。單位:以日志的命名精度來確定單位,比如yyyy-MM-dd-HH 單位為小時,yyyy-MM-dd-HH-mm 單位為分鐘。關鍵點在于 filePattern后的日期格式.modulate: boolean型,說明是否對封存時間進行調制。若modulate=true,則封存時間將以0點為邊界進行偏移計算。比如:modulate=true,interval=4hours,那么假設上次封存日志的時間為01:00,則下次封存日志的時間為04:00,之后的封存時間依次為08:00,12:00.--><!-- log4j2的按天分日志文件 : search-%d{yyyy-MM-dd}.log --><TimeBasedTriggeringPolicy interval="1" modulate="true" /><!--SizeBasedTriggeringPolicy 基于對log文件大小的判斷策略:當log文件大于設定的閾值時,將觸發封存動作。可設定的log文件大小的單位有bytes、KB、MB或GB。--><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!--DefaultRolloverStrategy(屬性如不設置,則默認為最多同一文件夾下7個文件):fileIndex: String類型,有兩個選擇“max”或“min”。設置為“max”意味著將最新的日志信息封存在序號較大的封存文件中。“min”則相反。max: integer類型,封存文件的序號的最大值。(超過最大值時,將有文件被刪除)min: integer類型,封存文件的序號的起始值。相當于min和max兩個參數設置了一個保存窗口,超出這個窗口的日志文件將會被刪除。--><DefaultRolloverStrategy max="100" /></RollingFile><RollingFile name="RollingFileError"fileName="${ERROR_LOG_FILE_NAME}/search-error.log"filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/search-error-%d{yyyy-MM-dd}.log"><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" /><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36}:%L [%t] - %msg%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /></Policies><DefaultRolloverStrategy max="100" /></RollingFile></Appenders><!--然后定義logger,只有定義了logger并引入的appender,appender才會生效--><Loggers><!--過濾掉spring的一些無用的DEBUG信息--><logger name="org.springframework" level="INFO"></logger><!-- 配置日志的根節點 --><!-- level="all" 只能夠輸出level級別是all及all以上的--><root level="all"><appender-ref ref="Console" /><appender-ref ref="RollingFileInfo" /><appender-ref ref="RollingFileError" /></root></Loggers> </Configuration>然后需要在web.xml中增加上下文,將文件配置進去
<!-- 集成log4j2日志框架 --><context-param><param-name>log4jConfiguration</param-name><param-value>classpath:log4j2.xml</param-value></context-param>最后測試:http://localhost:8080/springmvc/log/testLog1?username=leo825
2020-02-10 00:18:40.527 INFO com.leo.filter.MyFilter5:34 [http-apr-8080-exec-8] - MyFilter5 執行過濾 2020-02-10 00:18:40.542 INFO com.leo.filter.MyFilter5:37 [http-apr-8080-exec-8] - MyFilter5 信息: [UserInfo{id=3, name='曉玲', gender='女', age='22', remarks='工程師'}, UserInfo{id=4, name='曉玲', gender='女', age='24', remarks='工程師'}] 2020-02-10 00:18:40.652 INFO com.leo.controller.LoggerRecordController:38 [http-apr-8080-exec-8] - [UserInfo{id=3, name='曉玲', gender='女', age='22', remarks='工程師'}, UserInfo{id=4, name='曉玲', gender='女', age='24', remarks='工程師'}] 2020-02-10 00:18:40.653 INFO com.leo.controller.LoggerRecordController:41 [http-apr-8080-exec-8] - 獲取name=leo825接口耗時:12ms3.3 Slf4集成Logback
slf4j與logback整合導入的jar包為:
3.3.1 配置jar包依賴
依賴的jar可以參考如下pom中配置:
<!-- Slf4j的核心包,只有日志的接口,沒有實現層。整合logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j-log4j.version}</version></dependency><!-- 橋接器,將JCL的日志輸出重定向到Slf4j中,Sping中排除了JCL依賴 --><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j-log4j.version}</version><scope>runtime</scope></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>${logback.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version></dependency><!-- 為了將logback和spring集成而使用的包,如果不用這個包也可以記錄日志,但會有個問題 --><dependency><groupId>org.logback-extensions</groupId><artifactId>logback-ext-spring</artifactId><version>0.1.5</version></dependency><!-- slf4j整合logback結束 -->3.3.2 添加logback的配置文件
logback的配置文件有很多,也可以參考如下配置
<?xml version="1.0" encoding="UTF-8"?> <!--說明:1、日志級別及文件日志記錄采用分級記錄,級別與日志文件名相對應,不同級別的日志信息記錄到不同的日志文件中例如:error級別記錄到log.error.xxx.log或log.error.log(該文件為當前記錄的日志文件),而log.error.xxx.log為歸檔日志,日志文件按日期記錄,同一天內,若日志文件大小等于或大于10M,則按0、1、2...順序分別命名例如log-level-2013-12-21.0.log其它級別的日志也是如此。2、文件路徑若開發、測試用,在Eclipse中運行項目,則到Eclipse的安裝路徑查找logs文件夾.若部署到Tomcat下,則在Tomcat下的logs文件中.${catalina.base}能夠取到項目部署時候的tomcat目錄。3、AppenderFILE-ERROR對應error級別,文件名以log.error.xxx.log形式命名FILE-WARN對應warn級別,文件名以log.warn.xxx.log形式命名FILE-INFO對應info級別,文件名以log.info.xxx.log形式命名FILE-DEBUG對應debug級別,文件名以log.debug.xxx.log形式命名STDOUT將日志信息輸出到控制臺上,為方便開發測試使用--><!--scan: 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true.scanPeriod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒.當scan為true時,此屬性生效。默認的時間間隔為1分鐘.debug: 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 在Eclipse中運行,請到Eclipse的安裝目錄中找log文件,Tomcat下,請到Tomcat目錄下找 --><property name="LOG_PATH" value="${catalina.base}/logs"/><!-- 項目名稱 --><property name="PROJECT_NAME" value="spring-starter"/><!-- 控制臺打印日志的配置 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PROJECT_NAME} [%thread] [%logger{50}:%line] %msg%n</pattern><charset>utf-8</charset></encoder></appender><!-- 配置DEBUG, INFO, WARN, ERROR 日志的Appender --><appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${LOG_PATH}/${PROJECT_NAME}/${PROJECT_NAME}.log.error.log</file><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --><fileNamePattern>${LOG_PATH}/${PROJECT_NAME}/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 除按日志記錄之外,還配置了日志文件不能超過10M,若超過10M,日志文件會以索引0開始,命名日志文件,例如log-error-2013-12-21.0.log --><maxFileSize>10MB</maxFileSize><!-- 日志文件保留天數 --><maxHistory>30</maxHistory></rollingPolicy><!-- 追加方式記錄日志 --><append>true</append><!-- 日志打印的格式 --><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${PROJECT_NAME} [%thread] [%logger{50}:%line] %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只記錄error級別的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><appender name="FILE-WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${LOG_PATH}/${PROJECT_NAME}/${PROJECT_NAME}.log.warn.log</file><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --><fileNamePattern>${LOG_PATH}/${PROJECT_NAME}/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 除按日志記錄之外,還配置了日志文件不能超過10M,若超過10M,日志文件會以索引0開始,命名日志文件,例如log-warn-2013-12-21.0.log --><maxFileSize>10MB</maxFileSize><!-- 日志文件保留天數 --><maxHistory>30</maxHistory></rollingPolicy><!-- 追加方式記錄日志 --><append>true</append><!-- 日志打印的格式 --><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${PROJECT_NAME} [%thread] [%logger{50}:%line] %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只記錄warn級別,不記錄大于warn級別的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${LOG_PATH}/${PROJECT_NAME}/${PROJECT_NAME}.log.info.log</file><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --><fileNamePattern>${LOG_PATH}/${PROJECT_NAME}/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 除按日志記錄之外,還配置了日志文件不能超過10M,若超過10M,日志文件會以索引0開始,命名日志文件,例如log-info-2013-12-21.0.log --><maxFileSize>10MB</maxFileSize><!-- 日志文件保留天數 --><maxHistory>30</maxHistory></rollingPolicy><!-- 追加方式記錄日志 --><append>true</append><!-- 日志打印的格式 --><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${PROJECT_NAME} [%thread] [%logger{50}:%line] %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只記錄info級別,不記錄大于info級別的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><appender name="FILE-DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${LOG_PATH}/${PROJECT_NAME}/${PROJECT_NAME}.log.debug.log</file><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --><fileNamePattern>${LOG_PATH}/${PROJECT_NAME}/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 除按日志記錄之外,還配置了日志文件不能超過10M,若超過10M,日志文件會以索引0開始,命名日志文件,例如log-debug-2013-12-21.0.log --><maxFileSize>10MB</maxFileSize><!-- 日志文件保留天數 --><maxHistory>30</maxHistory></rollingPolicy><!-- 追加方式記錄日志 --><append>true</append><!-- 日志打印的格式 --><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${PROJECT_NAME} [%thread] [%logger{50}:%line] %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只記錄debug級別,不記錄大于debug級別的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- SPRING等框架類代碼日志打印, 輸出到OTHER文件中, 出廠默認WARN以上 --><appender name="OTHER" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 此日志文件只記錄warn級別及其以上的 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>WARN</level></filter><!-- 正在記錄的日志文件的路徑及文件名 --><File>${LOG_PATH}/${PROJECT_NAME}/${PROJECT_NAME}.log.other.log</File><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --><fileNamePattern>${LOG_PATH}/${PROJECT_NAME}/log-other-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 除按日志記錄之外,還配置了日志文件不能超過10M,若超過10M,日志文件會以索引0開始,命名日志文件,例如log-debug-2013-12-21.0.log --><maxFileSize>35MB</maxFileSize><!-- 日志文件保留天數 --><maxHistory>30</maxHistory></rollingPolicy><!-- 追加方式記錄日志 --><append>true</append><!-- 日志打印的格式 --><encoder><pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${PROJECT_NAME} [%thread] [%logger{50}:%line] %msg%n</pattern><charset>utf-8</charset></encoder></appender><!--出廠默認輸出level級別INFO, 排查問題時, 可以通過工具切換為TRACE.自定義模塊日志打印 添加在后面.name需要修改為自己項目中的合適的package--><logger name="com.leo" level="INFO" additivity="false"><appender-ref ref="FILE-ERROR" /><appender-ref ref="FILE-WARN" /><appender-ref ref="FILE-INFO" /><appender-ref ref="FILE-DEBUG" /><!-- 生產環境請將STDOUT去掉!!! --><appender-ref ref="STDOUT" /></logger><!-- 其他的warn級別及其以上的日志,通過OTHER來記錄 --><root level="WARN"><appender-ref ref="OTHER" /></root></configuration>然后,就是將配置文件配置到web.xml中
<!-- 集成logback日志框架 --><context-param><param-name>logbackConfiguration</param-name><param-value>classpath:logback.xml</param-value></context-param><listener><listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class></listener><!-- 集成logback日志框架end -->最后測試一下:http://localhost:8080/springmvc/log/testLog1?username=leo825
2020-02-10 11:01:08.777 INFO spring-starter [http-apr-8080-exec-8] [com.leo.filter.MyFilter5:34] MyFilter5 執行過濾 2020-02-10 11:01:08.793 INFO spring-starter [http-apr-8080-exec-8] [com.leo.filter.MyFilter5:37] MyFilter5 信息: [UserInfo{id=3, name='曉玲', gender='女', age='22', remarks='工程師'}, UserInfo{id=4, name='曉玲', gender='女', age='24', remarks='工程師'}] 2020-02-10 11:01:08.901 INFO spring-starter [http-apr-8080-exec-8] [com.leo.controller.LoggerRecordController:38] [UserInfo{id=3, name='曉玲', gender='女', age='22', remarks='工程師'}, UserInfo{id=4, name='曉玲', gender='女', age='24', remarks='工程師'}] 2020-02-10 11:01:08.902 INFO spring-starter [http-apr-8080-exec-8] [com.leo.controller.LoggerRecordController:41] 獲取name=leo825接口耗時:9ms參考:
總結
以上是生活随笔為你收集整理的SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC学习(二)——快速搭建
- 下一篇: 常见加密工具类Base64、DES、AE