日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springboot使用Log4j2的配置详解

發布時間:2025/3/19 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springboot使用Log4j2的配置详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Springboot使用Log4j2的配置

  • 日志框架的對比和選擇
  • 一、依賴配置(pom文件)
  • 二、log4j2.xml文件的配置
  • 三、Log4j2.xml配置文件核心概念解析
    • 1、全局Property
    • 2、Appender(**日志輸出源**)
    • 3、日志記錄的輸出格式PatternLayout
    • 4、Loggers:日志器
      • 1)、Root Logger
      • 2)、 其他Logger
  • 四、異步日志
    • 引用:

日志框架的對比和選擇

當前比較流行的日志框架有slf4j、log4j、logback、log4j2

  • 日志接口(slf4j)

slf4j是對所有日志框架制定的一種規范、標準、接口,并不是一個框架的具體的實現,因為接口并不能獨立使用,需要和具體的日志框架實現配合使用(如log4j、logback)

  • 日志實現(log4j、logback、log4j2)

log4j是apache實現的一個開源日志組件
logback同樣是由log4j的作者設計完成的,擁有更好的特性,用來取代log4j的一個日志框架,是slf4j的原生實現,springboot默認的日志組件就是使用的logback

Log4j2是log4j 1.x的大幅度改進和汲取了logback許多優秀的設計,性能當前是最好的,官網說明如下:


大致意思就是在多線程環境下比log4j 1和logback有了大幅提升,另外在異步日志方面,比logback等提升了18倍。所以,這里決定使用Log4j2作為主要的日志處理框架。

一、依賴配置(pom文件)

由于springboot自帶了logback的日志配置,因此如果要使用log4j2,則需要將springboot的starter中的logback配置排除掉:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><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>

二、log4j2.xml文件的配置

需要在項目的資源根路徑(src/main/resources)創建log4j2.xml文件

文件內容大致如下:

<?xml version="1.0" encoding="UTF-8"?><!--status="warn" 日志框架本身的輸出日志級別,可以修改為debugmonitorInterval="1800" 自動加載配置文件的間隔時間,不低于 1800秒;生產環境中修改配置文件,是熱更新,無需重啟應用--> <Configuration status="WARN" monitorInterval="1800"><!--全局屬性配置使用時通過:${name}--><properties><property name="LOG_HOME">/var/logs/test-project</property><property name="REQUEST_FILE_NAME">request</property><property name="INFO_FILE_NAME">log-info</property></properties><!-- 日志處理 --><Appenders><!-- 控制臺輸出 appender,SYSTEM_OUT輸出黑色,SYSTEM_ERR輸出紅色 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /></Console><RollingRandomAccessFile name="info-log"fileName="${LOG_HOME}/${INFO_FILE_NAME}.log"filePattern="${LOG_HOME}/$${date:yyyy-MM}/${INFO_FILE_NAME}-%d{yyyy-MM-dd}-%i.log"><PatternLayoutpattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="200 MB"/></Policies><DefaultRolloverStrategy max="200"/></RollingRandomAccessFile><RollingRandomAccessFile name="request-log"fileName="${LOG_HOME}/${REQUEST_FILE_NAME}.log"filePattern="${LOG_HOME}/$${date:yyyy-MM}/${REQUEST_FILE_NAME}-%d{yyyy-MM-dd}-%i.log"><PatternLayoutpattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="200 MB"/></Policies><DefaultRolloverStrategy max="200"/></RollingRandomAccessFile></Appenders><!-- logger 定義 --><Loggers><!-- 使用 rootLogger 配置 日志級別 level="info" --><Root level="info"><AppenderRef ref="info-log" /><AppenderRef ref="Console" /></Root><Logger name="request" level="info"additivity="false"><AppenderRef ref="request-log"/></Logger><Logger name="org.springframework"><AppenderRef ref="Console" /></Logger></Loggers> </Configuration>

三、Log4j2.xml配置文件核心概念解析

log4j2.xml配置文件主要參數配置如下:

  • Configuration:為根節點,有status和monitorInterval等多個屬性
    • status的值有 “trace”, “debug”, “info”, “warn”, “error” ,“fatal”,用于控制log4j2日志框架本身的日志級別,如果將stratus設置為較低的級別就會看到很多關于log4j2本身的日志,如加載log4j2配置文件的路徑等信息
    • monitorInterval,含義是每隔多少秒重新讀取配置文件,可以不重啟應用的情況下修改配置

1、全局Property

這里可以設置全局的參數,在后面的輸出源或者Logger日志器中使用,使用的時候,需要使用${參數名稱}來使用,例如以下:

fileName="${LOG_HOME}/${INFO_FILE_NAME}.log

其中的${LOG_HOME}就是引用了上面的property定義的參數

2、Appender(日志輸出源

官方給出的定義如下:

Appender就是日志輸出源,就是日志實際輸出的文件的,log4j2支持的輸出源有很多,有控制臺Console、文件File、RollingRandomAccessFile、MongoDB、Flume 等:

  • Console:控制臺輸出源是將日志打印到控制臺上,開發的時候一般都會配置,以便調試
  • File:文件輸出源,用于將日志寫入到指定的文件,需要配置輸入到哪個位置(例如:D:/logs/mylog.log)
  • RollingRandomAccessFile: 該輸出源也是寫入到文件,不同的是比File更加強大,可以指定當文件達到一定大小(如20MB)時,另起一個文件繼續寫入日志,另起一個文件就涉及到新文件的名字命名規則,因此需要配置文件命名規則,這種方式更加實用,因為你不可能一直往一個文件中寫,如果一直寫,文件過大,打開就會卡死,也不便于查找日志。
  • fileName 指定當前日志文件的位置和文件名稱
  • filePattern 指定當發生Rolling時,文件的轉移和重命名規則
  • SizeBasedTriggeringPolicy 指定當文件體積大于size指定的值時,觸發Rolling
  • DefaultRolloverStrategy 指定最多保存的文件個數
  • TimeBasedTriggeringPolicy
    這個配置需要和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-dd
    HH-mm}-%i,最小的時間粒度是mm,即分鐘
  • TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1分鐘生成一個新文件。如果改成%d{yyyy-MM-dd
    HH},最小粒度為小時,則每一個小時生成一個文件
  • NoSql:MongoDb, 輸出到MongDb數據庫中
  • Flume:輸出到Apache
    Flume(Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力。)
  • Async:異步,需要通過AppenderRef來指定要對哪種輸出源進行異步(一般用于配置RollingRandomAccessFile)

使用說明:
常用的是 RollingFile Appender或者RollingRandomAccessFile,它們是一種io 輸出流(OutputStreamAppender ),將日志事件寫到filePattern指定的路徑的fileName名稱的日志文件中,日志的滾動和歸檔的規則需要根據滾動策略的配置。主要策略為TriggeringPolicy(觸發策略) 策略和 RolloverPolicy(覆蓋策略),這兩個策略可以聯合起來使用。
如需要定義日志根據日期歸檔,同時還要根據每個日志文件大小達到一定的值,則日志切割成多個日志文件,例如,需要日志按照日期和日志大小來切割,則需要使用TimeBasedTriggeringPolicy 和 SizeBasedTriggeringPolicy 。TimeBasedTriggeringPolicy 這個配置需要和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-dd}-%i,最小的時間粒度是dd,即天,TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1天生成一個新文件。如果改成%d{yyyy-MM-dd HH},最小粒度為小時,則每一個小時生成一個文件,SizeBasedTriggeringPolicy 指定當文件體積大于size指定的值時,觸發Rolling,以上的配置配置的是200MB,總體結合起來就是每天生成一個日志問價,如果日志文件大小超過200MB,則會分隔成_1,_2…等后綴的日志文件。

3、日志記錄的輸出格式PatternLayout

日志文件里面每一行日志數據的格式都需要定義指定的樣式,例如:

<PatternLayoutpattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>

則日志會輸出格式如下的日志:


詳細參數解析如下:
%d{HH:mm:ss.SSS} 表示輸出到毫秒的時間

%t 輸出當前線程名稱

%-5level 輸出日志級別,-5表示左對齊并且固定輸出5個字符,如果不足在右邊補0

%logger 輸出logger名稱,因為Root Logger沒有名稱,所以沒有輸出

%msg 日志文本

%n 換行

其他常用的占位符有:

%F 輸出所在的類文件名,如Client.java

%L 輸出行號

%M 輸出所在方法名

%l 輸出語句所在的行數, 包括類名、方法名、文件名、行數

4、Loggers:日志器

日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低于WARN的信息都不會輸出。對于Loggers中level的定義同樣適用。

1)、Root Logger

配置如下:

<Root level="info"><AppenderRef ref="info-log" /><AppenderRef ref="Console" /></Root>

配置了logger的日志級別,以及引用的輸出源

2)、 其他Logger

除了可以聲明root logger之外,還可以聲明自定義的logger,并指定引用哪個輸出源:

<Logger name="request" level="info"additivity="false"><AppenderRef ref="request-log"/></Logger><Logger name="org.springframework"><AppenderRef ref="Console" /></Logger>

四、異步日志

由于項目暫時用不上異步日志,還未深入了解,待后面了解了再補充

引用:

[1] http://www.masterspringboot.com/configuration/logging/configuring-log4j2-in-spring-boot-applications
[2] http://logging.apache.org/log4j/2.x/
[3] https://blog.csdn.net/weixin_32265569/article/details/110723441

總結

以上是生活随笔為你收集整理的Springboot使用Log4j2的配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。