SpringBoot學習--08配置log4j2日志詳解(上)--配置使用

log4j2和log4j是一個作者,只不過log4j2是重新架構的一款日志組件罗岖,他拋棄了之前l(fā)og4j的不足谍珊,以及吸取了優(yōu)秀的logback的設計重新推出的一款新組件搀别。

  • 在pom.xml中導入依賴,首先去除SpringBoot自帶的logging包(logback),再導入log4j2的依賴包,
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <!-- 想要配置log4j2,就要先去除logging包 -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- 引用log4j2依賴包 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
  • 若是你只是想看看日志,這時在application配置文件中配置,
#application.properties
logging.level.root=error  #顯示日志級別

#application.yml
logging:
  level: 
   root: info #顯示日志級別
log4j2 中默認的日志級別為:trace < debug < info < warn < error < fatal
當設置了日志輸出級別時怕享,當前級別及以上級別的日志會輸出执赡,而當前級別以下級別的日志則不會輸出,系統(tǒng)默認輸出級別為 error函筋,也就是說默認設置下沙合,只有 error 和 fatal這兩級日志會輸出.

trace:即追蹤,程序每推進一步均可輸出一條trace日志跌帐,主要用于展現(xiàn)程序運行軌跡
debug:調(diào)試
info:輸出你感興趣的信息首懈,一般用于基本的、高層次的診斷信息谨敛。在長時間運行的代碼段開始運行及結束運行時應該產(chǎn)生消息究履,以便知道現(xiàn)在系統(tǒng)在干什么。但是這樣的信息不宜太過頻繁
warn:提示信息
error:錯誤信息脸狸,顯示一個錯誤最仑,或一個通用的錯誤情況,但還不至于會將系統(tǒng)掛起炊甲。這種程度的錯誤一般會觸發(fā)郵件的發(fā)送泥彤,將消息發(fā)送到alert list中,運維人員可以在文檔中記錄這個bug并提交
fatal:會導致程序崩潰的重大錯誤蜜葱,用在極端的情形中全景,即必須馬上獲得注意的情況

這時候,就可以使用系統(tǒng)默認的輸出格式了,如圖所示:

默認的輸出格式

但是很多的時候我們需要進行日志的記錄以及后期維護時日志的查看,所以我們需要自定義日志的配置,配置文件命名的規(guī)則如下:

SpringBoot官方文檔推薦方式
  • 文件配置優(yōu)先級

對應于四類配置文件:XML耀石、 JSON牵囤、 YAML 和 properties,Log4j 分別有與之相應的 ConfigurationFactory 實現(xiàn)類滞伟,不同的實現(xiàn)類可以加載不同擴展名的配置文件中的配置信息揭鳞。當 Log4j 啟動時會按照一定的優(yōu)先級順序在classpath(一般是項目的src文件夾下,即在src/main/resources下)查找項目中的配置文件,若找到一個配置文件梆奈,就調(diào)用與當前文件擴展名對應的ConfigurationFactory實現(xiàn)類加載該配置文件中的配置信息野崇,否則繼續(xù)查找下一優(yōu)先級的配置文件,若未找到任何配置文件亩钟,就使用默認配置DefaultConfiguration乓梨。
不同配置文件的優(yōu)先級如下圖所示:

配置文件優(yōu)先級

配置文件內(nèi)容:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- status : 這個用于設置log4j2自身內(nèi)部的信息輸出,默認是OFF,可以不設置,當設置成trace時,會看到log4j2內(nèi)部各種詳細輸出 
     monitorInterval : Log4j能夠自動檢測修改配置文件和重新配置本身, 設置間隔秒數(shù)。 
               注:本配置文件的目標是將不同級別的日志輸出到不同文件清酥,最大2MB一個文件扶镀, 文件數(shù)據(jù)達到最大值時,舊數(shù)據(jù)會被壓縮并放進指定文件夾 -->
<Configuration status="TRACE" monitorInterval="600">

  <Properties> <!-- 配置全局變量 -->
    <!-- 配置日志文件輸出目錄焰轻,此配置將日志輸出到tomcat根目錄下的指定文件夾 -->
    <!-- <Property name="LOG_HOME">D:/logs</Property> -->
    <Property name="LOG_HOME">./target/logs</Property>
    <!-- 配置日志輸出格式 -->
    <Property name="LOG_PATTERN">%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} %-5level [%t] (%F:%M:%L) --- %m%xEx%n</Property>
    <!-- 配置日志輸出級別 --><!-- 設置顯示級別直接在這里修改 -->
    <Property name="OUT_LOG_LEVEL">INFO</Property>
    <!-- 配置日志切割的最小單位 -->
    <Property name="FILE_SIZE">2MB</Property>
  </Properties>

  <Appenders>
     <!-- 優(yōu)先級從高到低分別是 OFF臭觉、FATAL、ERROR、WARN蝠筑、INFO狞膘、DEBUG、TRACE -->
        <!-- 單詞解釋: 
        Match:匹配 
        DENY:拒絕 
        Mismatch:不匹配
        ACCEPT:接受 -->
        <!-- 
        DENY什乙,日志將立即被拋棄不再經(jīng)過其他過濾器挽封;
        NEUTRAL,有序列表里的下個過濾器過接著處理日志臣镣;
        ACCEPT场仲,日志會被立即處理,不再經(jīng)過剩余過濾器退疫。 -->
        <!--輸出日志的格式
         %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生產(chǎn)時間,輸出到毫秒的時間
         %-5level : 輸出日志級別渠缕,-5表示左對齊并且固定輸出5個字符,如果不足在右邊補0
         %p : 日志輸出格式,輸出日志級別褒繁,-5表示左對齊并且固定輸出5個字符亦鳞,如果不足在右邊補0
         %c : logger的名稱 (%logger)
         %t : 輸出當前線程名稱
         %m : 日志內(nèi)容,即 logger.info("message") 
         %n : 換行符 
         %C : Java類名(%F)
         %L : 日志輸出所在行數(shù) 
         %M : 日志輸出所在方法名 
         %l : 輸出語句所在的行數(shù), 包括類名棒坏、方法名燕差、文件名、行數(shù)
         hostName : 本地機器名 
         hostAddress : 本地ip地址 -->

    <!--這個輸出控制臺的配置坝冕,這里輸出除了debug到error級別的信息到System.out -->
    <Console name="console_out_appender" target="SYSTEM_OUT">
      <!-- 控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) . -->
      <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" />
      <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="NEUTRAL" />
      <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="NEUTRAL" />
      <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" />
      <!-- 輸出日志的格式 -->
      <PatternLayout pattern="${LOG_PATTERN}" />
      <!-- <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> -->
    </Console>
    <!-- 這個輸出控制臺的配置徒探,這里輸出error級別以上的信息到System.err,在eclipse控制臺上看到的是紅色文字 -->
    <Console name="console_err_appender" target="SYSTEM_ERR">
      <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
      <PatternLayout pattern="${LOG_PATTERN}" />
    </Console>
    
    <!-- 運行時的測試日志 -->
    <!--   文件會打印出所有信息喂窟,這個log每次運行程序會自動清空测暗,由append屬性決定,這個也挺有用的磨澡,適合臨時測試用 --> 
    <!--   append為TRUE表示消息增加到指定文件中碗啄,false表示消息覆蓋指定的文件內(nèi)容,默認值是true --> 
    <File name="INFO" fileName="${LOG_HOME}/testLog.log" append="false">
      <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
      <PatternLayout pattern="${LOG_PATTERN}"/>
    </File>
    
    <!--
            循環(huán)日志文件:日志文件大于閥值的時候稳摄,就開始寫一個新的日志文件這個會打印出所有的信息稚字,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進行壓縮厦酬,作為存檔

    fileName    : 指定當前日志文件的位置和文件名稱
    filePattern : 指定當發(fā)生Rolling時胆描,文件的轉(zhuǎn)移和重命名規(guī)則
    SizeBasedTriggeringPolicy : 指定當文件體積大于size指定的值時,觸發(fā)Rolling
    DefaultRolloverStrategy : 指定最多保存的文件個數(shù)
    TimeBasedTriggeringPolicy : 這個配置需要和filePattern結合使用
            注意:filePattern中配置的文件重命名規(guī)則是${FILE_NAME}_%d{yyyy-MM-dd}_%i仗阅,最小的時間粒度是dd昌讲,即天,TimeBasedTriggeringPolicy指定的size是1霹菊,結合起來就是每1天生成一個新文件
    -->
            
    <!-- TRACE級別日志 ; 設置日志格式并配置日志壓縮格式剧蚣,壓縮文件獨立放在一個文件夾內(nèi)支竹, 日期格式不能為冒號,否則無法生成鸠按,因為文件名不允許有冒號礼搁,此appender只輸出trace級別的數(shù)據(jù)到trace.log -->
    <RollingFile name="trace_appender" immediateFlush="true" fileName="${LOG_HOME}/trace.log" filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}" />
      <Policies>
        <!-- 每個日志文件最大2MB -->
        <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
      </Policies>
      <!-- 設置同一類型日志文件個數(shù),默認為7 -->
      <!-- <DefaultRolloverStrategy max="20"/> -->  
      <Filters>
        <!-- 此Filter意思是,只輸出TRACE級別的數(shù)據(jù) DENY目尖,日志將立即被拋棄不再經(jīng)過其他過濾器馒吴; NEUTRAL,有序列表里的下個過濾器過接著處理日志瑟曲; ACCEPT饮戳,日志會被立即處理,不再經(jīng)過剩余過濾器洞拨。 -->
        <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL" />
        <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
      </Filters>
    </RollingFile>

    <!-- DEBUG級別日志 設置日志格式并配置日志壓縮格式扯罐,壓縮文件獨立放在一個文件夾內(nèi), 日期格式不能為冒號烦衣,否則無法生成歹河,因為文件名不允許有冒號,此appender只輸出debug級別的數(shù)據(jù)到debug.log; -->
    <RollingFile name="debug_appender" immediateFlush="true" fileName="${LOG_HOME}/debug.log" filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}" />
      <Policies>
        <!-- 每個日志文件最大2MB ; -->
        <SizeBasedTriggeringPolicy size="${FILE_SIZE}" /><!-- 按大小分 -->
        <!-- 如果啟用此配置花吟,則日志會按文件名生成新壓縮文件秸歧, 即如果filePattern配置的日期格式為 %d{yyyy-MM-dd HH} ,則每小時生成一個壓縮文件衅澈, 如果filePattern配置的日期格式為 %d{yyyy-MM-dd} 键菱,則天生成一個壓縮文件 -->
        <!-- <TimeBasedTriggeringPolicy interval="1" modulate="true" /> --><!-- 按天分日志文件 -->
      </Policies>
      <Filters><!-- 此Filter意思是,只輸出debug級別的數(shù)據(jù) -->
        <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL" />
        <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
      </Filters>
    </RollingFile>

    <!-- INFO級別日志 -->
    <RollingFile name="info_appender" immediateFlush="true" fileName="${LOG_HOME}/info.log" filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}" />
      <Policies>
        <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
      </Policies>
      <Filters>
        <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
      </Filters>
    </RollingFile>

    <!-- WARN級別日志 -->
    <RollingFile name="warn_appender" immediateFlush="true" fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}" />
      <Policies>
        <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
      </Policies>
      <Filters>
        <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" />
        <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" />
      </Filters>
    </RollingFile>

    <!-- ERROR級別日志 -->
    <RollingFile name="error_appender" immediateFlush="true" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
      <PatternLayout pattern="${LOG_PATTERN}" />
      <Policies>
        <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
      </Policies>
      <Filters>
        <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
      </Filters>
    </RollingFile>
    
  </Appenders>

  <!--  然后定義logger今布,只有定義了logger并引入的appender经备,appender才會生效 --> 
  <Loggers>
    <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
    <logger name="org.springframework" level="INFO" />
    <logger name="org.mybatis" level="INFO" />
    <!-- 配置日志的根節(jié)點 -->
    <!-- 定義logger,只有定義了logger并引入了appender险耀,appender才會生效 -->
    <root level="${OUT_LOG_LEVEL}">
      <appender-ref ref="console_out_appender" />
      <appender-ref ref="console_err_appender" />
      <appender-ref ref="trace_appender" />
      <appender-ref ref="debug_appender" />
      <appender-ref ref="info_appender" />
      <appender-ref ref="warn_appender" />
      <appender-ref ref="error_appender" />
    </root> 
  </Loggers>

</Configuration>

到這里就可以使用log4j2日志了,其顯示如下圖:

輸出日志樣式
  • 但是我這種強迫一定要分包分類存放文件,如下:
項目文件分包

這時你會發(fā)現(xiàn)啟動項目會報錯,無法找到log4j2的配置文件,解決辦法:

  • 在application配置文件中添加log日志配置文件地址
# yml方式
logging: 
  config: classpath:log4j2/log4j2-spring.xml

# properties方式
logging.config = classpath:log4j2/log4j2-spring.xml

再啟動項目就可以成功了.

  • 使用方式
# 導包
import org.apache.logging.log4j.LogManager;

# 初始化log
private static final Logger log = LogManager.getLogger(SysDepartmentController.class);

# 使用
log.trace("======trace");
log.debug("======debug");
log.info("======info");
log.warn("======warn");
log.error("======error");

log4j2的官網(wǎng):http://logging.apache.org/log4j/2.x/
Log4j2高級配置以及簡單的示例:https://my.oschina.net/kkrgwbj/blog/734530
Log4j2配置項目詳解:https://blog.csdn.net/womeng2009/article/details/53510913
Log4j2詳解:http://www.reibang.com/p/4ac14b9f51d2
SpringBoot官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/html/index.html
Log4j2日志輸出路徑配置:https://www.cnblogs.com/doit8791/p/5372004.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弄喘,一起剝皮案震驚了整個濱河市玖喘,隨后出現(xiàn)的幾起案子甩牺,更是在濱河造成了極大的恐慌,老刑警劉巖累奈,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬派,死亡現(xiàn)場離奇詭異,居然都是意外死亡澎媒,警方通過查閱死者的電腦和手機搞乏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戒努,“玉大人请敦,你說我怎么就攤上這事镐躲。” “怎么了侍筛?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵萤皂,是天一觀的道長。 經(jīng)常有香客問我匣椰,道長裆熙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任禽笑,我火速辦了婚禮入录,結果婚禮上,老公的妹妹穿的比我還像新娘佳镜。我一直安慰自己僚稿,他們只是感情好,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布蟀伸。 她就那樣靜靜地躺著贫奠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪望蜡。 梳的紋絲不亂的頭發(fā)上唤崭,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音脖律,去河邊找鬼谢肾。 笑死,一個胖子當著我的面吹牛小泉,可吹牛的內(nèi)容都是我干的芦疏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼微姊,長吁一口氣:“原來是場噩夢啊……” “哼酸茴!你這毒婦竟也來了?” 一聲冷哼從身側響起兢交,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薪捍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后配喳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酪穿,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年晴裹,在試婚紗的時候發(fā)現(xiàn)自己被綠了被济。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涧团,死狀恐怖只磷,靈堂內(nèi)的尸體忽然破棺而出经磅,到底是詐尸還是另有隱情,我是刑警寧澤钮追,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布馋贤,位于F島的核電站,受9級特大地震影響畏陕,放射性物質(zhì)發(fā)生泄漏配乓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一惠毁、第九天 我趴在偏房一處隱蔽的房頂上張望犹芹。 院中可真熱鬧,春花似錦鞠绰、人聲如沸腰埂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屿笼。三九已至,卻和暖如春翁巍,著一層夾襖步出監(jiān)牢的瞬間驴一,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工灶壶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肝断,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓驰凛,卻偏偏與公主長得像胸懈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恰响,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355