Spring?Boot?3中一套可以直接用于生產(chǎn)環(huán)境的Log4J2日志配置詳解
一 Log4J2 相關(guān)概念及基本特點(diǎn)
Log4J2是Apache Log4j的升級(jí)版,參考了logback的一些優(yōu)秀的設(shè)計(jì),并且修復(fù)了一些問(wèn)題,因此帶來(lái)了一些重大的提升。
Logger:日志記錄器,用于標(biāo)識(shí)日志的來(lái)源。常見(jiàn)的有兩種:Root和Logger。Root節(jié)點(diǎn)用來(lái)指定項(xiàng)目的根日志,如果沒(méi)有單獨(dú)指定Logger,那么就會(huì)默認(rèn)使用該Root日志輸出
Appender:日志輸出器,用于將日志記錄輸出到指定的目標(biāo)。常見(jiàn)的有三種子節(jié)點(diǎn):Console、RollingFile、File。Console節(jié)點(diǎn)用來(lái)定義輸出到控制臺(tái)的Appender;RollingFile節(jié)點(diǎn)用來(lái)定義超過(guò)指定條件自動(dòng)刪除舊的創(chuàng)建新的Appender;File節(jié)點(diǎn)用來(lái)定義輸出到指定位置的文件的Appender。
Layout:日志格式化器,用于定義日志記錄的輸出格式。Root節(jié)點(diǎn)用來(lái)指定項(xiàng)目的根日志,如果沒(méi)有單獨(dú)指定Logger,那么就會(huì)默認(rèn)使用該Root日志輸出。
二 Spring Boot3 中啟用Log4J2的pom.xml配置
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
排除原依賴中的日志相關(guān)包,單獨(dú)引入Log4J2依賴。
三 application.properties 的配置
# 控制臺(tái)輸出的字符集 logging.charset.console=UTF-8 # 日志寫入文件的字符集 logging.charset.file=UTF-8 # Log4J2自定義配置的路徑,放置到resources目錄下 logging.config=classpath:logback.xml # 應(yīng)用程序包的路徑 logging.level.com.test=INFO # 日志存放路徑 logging.file.path=logs/test.log
四 完整配置
配置文件的名稱為:logback.xml,放置于resources目錄下。
<?xml version="1.0" encoding="UTF-8"?> <!--status:用來(lái)指定log4j2本身的打印日志的級(jí)別,monitorinterval:用于指定log4j自動(dòng)重新配置的監(jiān)測(cè)間隔時(shí)間,單位是s,最小是5s--> <Configuration status="WARN" monitorInterval="30"> <Properties> <Property name="logDir">logs</Property> <Property name="logFile">cmams</Property> <Property name="level">DEBUG</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%-4level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %logger{96}:%line - %msg%n"/> <!--控制臺(tái)只輸出level及其以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> </Console> <RollingFile name="File" fileName="${logDir}/${logFile}.log" filePattern="${logDir}/${logFile}-%d{yyyy-MM-dd}-%i.log.gz"> <!--日志輸出格式--> <PatternLayout pattern="[%-4level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %logger{96}:%line - %msg%n"/> <!--滿足任何一個(gè)policy即進(jìn)行歸檔--> <Policies> <!--當(dāng)前日志與開(kāi)始日期不匹配(RollingFile中配置的filePattern中配置的最小時(shí)間單位不匹配時(shí))時(shí)進(jìn)行歸檔--> <TimeBasedTriggeringPolicy/> <!--文件超過(guò)512M進(jìn)行歸檔,SizeBasedTriggeringPolicy規(guī)定了當(dāng)日志文件達(dá)到了指定的size時(shí),觸發(fā)rollover操作。size參數(shù)可以用KB、MB、GB等做后綴來(lái)指定具體的字節(jié)數(shù),如20MB--> <SizeBasedTriggeringPolicy size="64MB"/> </Policies> <!--歸檔的文件最大數(shù)量,max參數(shù)指定了計(jì)數(shù)器的最大值。一旦計(jì)數(shù)器達(dá)到了最大值,過(guò)舊的文件將被刪除。--> <DefaultRolloverStrategy max="20"> <!--刪除規(guī)則--> <Delete basePath="${logDir}" maxDepth="2"> <!--匹配文件規(guī)則--> <IfFileName glob="*.log.gz"> <IfLastModified age="60d"> <IfAny> <!--logDir下文件總大小超過(guò)5GB,進(jìn)行刪除--> <IfAccumulatedFileSize exceeds="5GB"/> <!--logDir下文件總數(shù)量超過(guò)100,進(jìn)行刪除--> <IfAccumulatedFileCount exceeds="100"/> </IfAny> </IfLastModified> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> </Appenders> <Loggers> <!--若是additivity設(shè)為false,則 子Logger 只會(huì)在自己的appender里輸出,而不會(huì)在 父Logger 的appender里輸出。--> <Logger name="com.cxwn.cmams" level="${level}" additivity="false"> <AppenderRef ref="File"/> <AppenderRef ref="Console"/> </Logger> <Logger name="org.springframework" level="ERROR" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <Root level="WARN"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Root> </Loggers> </Configuration>
到此這篇關(guān)于Spring Boot 3中一套可以直接用于生產(chǎn)環(huán)境的Log4J2日志配置的文章就介紹到這了,更多相關(guān)Spring Boot 3 Log4J2日志配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java并發(fā)編程中的ConcurrentLinkedQueue詳解
這篇文章主要介紹了Java并發(fā)編程中的ConcurrentLinkedQueue詳解,GetThread線程不會(huì)因?yàn)镃oncurrentLinkedQueue隊(duì)列為空而等待,而是直接返回null,所以當(dāng)實(shí)現(xiàn)隊(duì)列不空時(shí),等待時(shí),則需要用戶自己實(shí)現(xiàn)等待邏輯,需要的朋友可以參考下2023-12-12spring自定義一個(gè)簡(jiǎn)單的Starter啟動(dòng)器
這篇文章主要介紹了spring自定義一個(gè)簡(jiǎn)單的Starter啟動(dòng)器,一個(gè) starter其實(shí)就是對(duì)一個(gè)功能的集成封裝,然后對(duì)外提供一個(gè)依賴,讓業(yè)務(wù)去使用,像我們熟悉的 Redis,mongo,mybatis 等均屬于,需要的朋友可以參考下2023-07-07linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式總結(jié)
Linux是集多種功能于一身的操作系統(tǒng),它可以讓用戶查看和管理當(dāng)下正在運(yùn)行的進(jìn)程,包括Java程序,這篇文章主要給大家總結(jié)介紹了關(guān)于linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式,需要的朋友可以參考下2023-10-10Windows7下的Java運(yùn)行環(huán)境搭建過(guò)程圖解
這篇文章主要介紹了Windows7下的Java運(yùn)行環(huán)境搭建過(guò)程圖解,需要的朋友可以參考下2014-04-04基于Redis實(shí)現(xiàn)分布式應(yīng)用限流的方法
本篇文章主要介紹了基于 Redis 實(shí)現(xiàn)分布式應(yīng)用限流的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Springboot工具類FileCopyUtils使用教程
這篇文章主要介紹了Springboot內(nèi)置的工具類之FileCopyUtils的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12Mybatis增強(qiáng)版MyBatis-Flex的具體使用
Mybatis-Flex一個(gè)用于增強(qiáng)MyBatis的框架,本文主要介紹了Mybatis增強(qiáng)版MyBatis-Flex的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06