Spring+SpringMVC+MyBatis+easyUI整合最佳化

duanhao發表於2021-09-09
日常囉嗦

上一篇文章主要講述了一下syso和Log間的一些區別與比較,重點是在專案的日誌功能上,因此,承接前文《》,本文是一個較為直觀的日誌功能案例,java的日誌框架很多,如Log4j、Log4j2、logback、SLF4J,篇幅有限,所以本篇只介紹一下Log4j,並將其整合到專案中,對於其他日誌框架,想了解的可以對應的去學習一下。

Log4j簡介

日誌記錄功能是一個專案中重要的組成部分,log4j是APache下的一個開源日誌元件,為java開發者提供了很大的便利。

Log4j由三個重要的元件構成:

  • Loggers,日誌資訊的優先順序

日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌資訊的重要程度,設定為高階別的優先順序時,低優先順序的日誌將不會輸出,比如將日誌級別設定為INFO,則DEBUG級別的目錄不會被記錄,為了防止日誌輸出氾濫,最好不要將日誌級別設定太低,一般為INFO即可。

  • Appenders,日誌資訊的輸出目的地

日誌資訊的輸出目的地指定了日誌將列印到控制檯還是檔案中,引數如下:
org.apache.log4j.ConsoleAppender (控制檯)
org.apache.log4j.FileAppender (檔案)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案,本文中的案例選擇的策略)
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案,也是一個不錯的選擇
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)

  • Layouts,日誌資訊的輸出格式

輸出格式的功能是控制日誌資訊的顯示內容,引數如下:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式,本案例所選擇的策略,需對日誌格式進行設定)
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)

log4j簡單demo

下面是一個簡單的案例,並與System.out.print進行比較,程式碼在github上,可以下載自己執行一下。

日誌輸出:

import org.apache.log4j.Logger;
public class LogTest {
    static Logger log = Logger.getLogger(LogTest.class);//獲取日誌記錄器
    public static void main(String... arg0) {
        long start = System.currentTimeMillis();
        for (int i = 0; i 

syso輸出:

public class SysoTest {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i 

Log4j配置檔案如下:

log4j.rootLogger=DEBUG, debug
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern= [%d{HH:mm:ss}] %c{1} - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=./logs/ssm-maven/debug.log

此配置檔案為log4j-test.properties,也會上傳到倉庫中,注意:在測試本例時,需將此檔名改為log4j.properties
執行後可得到如下結果,在專案logs目錄下建立了debug.log資料夾並將輸出寫入到檔案中。
圖片描述

log4j整合並設定分包的日誌策略

上面只是一個簡單的demo,重要的還是要將日誌功能整合到專案中來。

配置檔案及講解如下:

#log4j.rootLogger = [level],appenderName,appenderName2,...
#level是日誌記錄的優先順序,分為OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL
##Log4j建議只使用四個級別,優先順序從低到高分別是DEBUG,INFO,WARN,ERROR
#透過在這裡定義的級別,您可以控制到應用程式中相應級別的日誌資訊的開關
#比如在這裡定義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被列印出來

log4j.rootLogger=DEBUG, debug

#Log4j針對不同包指定level:
#一般在生產環境中應用系統,日誌級別調整為INFO以避免過多的輸出日誌。
#但某些時候,需要跟蹤具體問題,那麼就得開啟DEBUG日誌。
#但是如果開啟log4j.rootLogger,則需要的資訊就會淹沒在日誌的海洋中。
#此時,需要單獨指定某個或者某些Logger的日誌級別為DEBUG,而rootLogger保持INFO不變。
#參考配置如下(指定com.ssm.maven.core.admin類的日誌輸出)
#分包設定,admin與service包中的日誌輸出分離
log4j.logger.com.ssm.maven.core.admin=INFO,admin
log4j.logger.com.ssm.maven.core.service=INFO,service

log4j.logger.org.springframework=OFF
log4j.logger.org.mybatis.spring=ON
log4j.logger.org.springframework.context.annotation=OFF

log4j.appender.admin=org.apache.log4j.DailyRollingFileAppender
log4j.appender.admin.layout=org.apache.log4j.PatternLayout
log4j.appender.admin.layout.ConversionPattern= [%d{HH:mm:ss}] %c{1} - %m%n
log4j.appender.admin.datePattern='.'yyyy-MM-dd
log4j.appender.admin.Threshold = INFO
log4j.appender.admin.append=true
#admin包下的日誌輸出到admin.log檔案中
log4j.appender.admin.File=${catalina.home}/logs/ssm-maven/admin.log

log4j.appender.service=org.apache.log4j.DailyRollingFileAppender
log4j.appender.service.layout=org.apache.log4j.PatternLayout
log4j.appender.service.layout.ConversionPattern= [%d{HH:mm:ss}] %c{1} - %m%n
log4j.appender.service.datePattern='.'yyyy-MM-dd
log4j.appender.service.Threshold = INFO
log4j.appender.service.append=true
#admin包下的日誌輸出到service.log檔案中
log4j.appender.service.File=${catalina.home}/logs/ssm-maven/service.log

log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern= [%d{HH:mm:ss}] %c{1} - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=${catalina.home}/logs/ssm-maven/debug.log

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

部署到tomcat伺服器,並訪問相關頁面後,可以到tomcat目錄的logs目錄下檢視日誌輸出檔案:
圖片描述

檢視日誌檔案,可以得到日誌已經分包輸出的結果。

結語

其實無論是System.out或者Log,我們都是希望快速的定位問題,至於更多的使用System.out而不是Log的原因,其實也多是因為覺得System.out更方便,或者不會用Log亦或者是覺得Log不夠靈活,而透過本文中的案例,加上你自己的動手實踐,應該可以讓你對於Log4j技能從不會到會了,也能讓你對於Log4j的靈活性有些認識了。

我的github地址:
其中ssm-maven是本次程式碼更新的目錄。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2798673/,如需轉載,請註明出處,否則將追究法律責任。

相關文章