<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
公司的spring boot專案不是使用預設的logback作為紀錄檔框架,而是log4j2, 主要原因是logback出現過一個生產問題導致,具體什麼問題難以追溯了。本文主要講解下SpringBoot 2.x如何更換springboot的紀錄檔框架為log4j2, 以及log4j2的設定。
本次演示採用的springboot 版本為2.7.x。
<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>
spring-boot-starter-logging
spring-boot-starter-log4j2
log4j2-spring.xml
或者log4j2.xml
檔案,建議使用log4j-spring.xml,這種方式spring可以控制初始化。logging.config: ./log4j2.xml
來修改。下面通過一個最精簡的設定內容,下一節詳細講解設定。
<?xml version="1.0" encoding="UTF-8"?> <configuration monitorInterval="5"> <!--變數設定--> <Properties> <!-- 格式化輸出:%date表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度 %msg:紀錄檔訊息,%n是換行符--> <!-- %logger{36} 表示 Logger 名字最長36個字元 --> <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> <!-- 定義紀錄檔儲存的路徑 --> <property name="FILE_PATH" value="./logs"/> <property name="FILE_NAME" value="log4j2Demo"/> </Properties> <appenders> <Console name="Console" target="SYSTEM_OUT"> <!--設定紀錄檔格式及顏色--> <PatternLayout pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}" disableAnsi="false" noConsoleNoAnsi="false"/> </Console> <!--檔案會列印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,適合臨時測試用--> <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false"> <PatternLayout pattern="${LOG_PATTERN}"/> </File> <!-- 這個會列印出所有的info及以下級別的資訊,每次大小超過size,則這size大小的紀錄檔會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久捲動一次,預設是1 hour--> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案開始覆蓋--> <DefaultRolloverStrategy max="15"/> </RollingFile> <!-- 這個會列印出所有的warn及以下級別的資訊,每次大小超過size,則這size大小的紀錄檔會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久捲動一次,預設是1 hour--> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案開始覆蓋--> <DefaultRolloverStrategy max="15"/> </RollingFile> <!-- 這個會列印出所有的error及以下級別的資訊,每次大小超過size,則這size大小的紀錄檔會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久捲動一次,預設是1 hour--> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案開始覆蓋--> <DefaultRolloverStrategy max="15"/> </RollingFile> </appenders> <!--Logger節點用來單獨指定紀錄檔的形式,比如要為指定包下的class指定不同的紀錄檔級別等。--> <!--然後定義loggers,只有定義了logger並引入的appender,appender才會生效--> <loggers> <root level="info"> <appender-ref ref="Console"/> <appender-ref ref="Filelog"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> </root> </loggers> </configuration>
log4j2紀錄檔級別從低到高,如下:
● trace:追蹤,就是程式推進一下,可以寫個trace輸出
● debug:偵錯,一般作為最低階別,trace基本不用。
● info:輸出重要的資訊,使用較多
● warn:警告,有些資訊不是錯誤資訊,但也要給程式設計師一些提示。
● error:錯誤資訊。用的也很多。
● fatal:致命錯誤。
如果一條紀錄檔資訊的級別大於等於組態檔的級別,就記錄。
組態檔模板如下:
<?xml version="1.0" encoding="UTF-8"?> <!--Configuration後面的status,這個用於設定log4j2自身內部的資訊輸出,可以不設定,當設定成trace時,你會看到log4j2內部各種詳細輸出--> <!--monitorInterval:Log4j能夠自動檢測修改設定 檔案和重新設定本身,設定間隔秒數--> <configuration monitorInterval="5"> <!--紀錄檔級別以及優先順序排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--變數設定--> <Properties> <!-- 格式化輸出:%date表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度 %msg:紀錄檔訊息,%n是換行符--> <!-- %logger{36} 表示 Logger 名字最長36個字元 --> <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> <!-- 定義紀錄檔儲存的路徑 --> <property name="FILE_PATH" value="更換為你的紀錄檔路徑" /> <property name="FILE_NAME" value="更換為你的專案名" /> </Properties> <appenders> <console name="Console" target="SYSTEM_OUT"> <!--輸出紀錄檔的格式--> <PatternLayout pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}" disableAnsi="false" noConsoleNoAnsi="false"/> <!--控制檯只輸出level及其以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </console> <!--檔案會列印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,適合臨時測試用--> <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false"> <PatternLayout pattern="${LOG_PATTERN}"/> </File> <!-- 這個會列印出所有的info及以下級別的資訊,每次大小超過size,則這size大小的紀錄檔會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久捲動一次,預設是1 hour--> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案開始覆蓋--> <DefaultRolloverStrategy max="15"/> </RollingFile> <!-- 這個會列印出所有的warn及以下級別的資訊,每次大小超過size,則這size大小的紀錄檔會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久捲動一次,預設是1 hour--> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案開始覆蓋--> <DefaultRolloverStrategy max="15"/> </RollingFile> <!-- 這個會列印出所有的error及以下級別的資訊,每次大小超過size,則這size大小的紀錄檔會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${LOG_PATTERN}"/> <Policies> <!--interval屬性用來指定多久捲動一次,預設是1 hour--> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案開始覆蓋--> <DefaultRolloverStrategy max="15"/> </RollingFile> </appenders> <!--Logger節點用來單獨指定紀錄檔的形式,比如要為指定包下的class指定不同的紀錄檔級別等。--> <!--然後定義loggers,只有定義了logger並引入的appender,appender才會生效--> <loggers> <!--過濾掉spring和mybatis的一些無用的DEBUG資訊--> <logger name="org.mybatis" level="info" additivity="false"> <AppenderRef ref="Console"/> </logger> <!--監控系統資訊--> <!--若是additivity設為false,則 子Logger 只會在自己的appender裡輸出,而不會在 父Logger 的appender裡輸出。--> <Logger name="org.springframework" level="info" additivity="false"> <AppenderRef ref="Console"/> </Logger> <root level="info"> <appender-ref ref="Console"/> <appender-ref ref="Filelog"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> </root> </loggers> </configuration>
設定全域性變數,可以通過${xxx}的方式參照
常見的有三種Appender: Console、RollingFile、File。
Console節點用來定義輸出到控制檯的Appender.
File節點用來定義輸出到指定位置的檔案的Appender.
RollingFile節點用來定義超過指定條件自動刪除舊的建立新的Appender.
常見的有兩種型別:root和logger, root實際上是一種特殊的logger。root節點用來指定專案的根紀錄檔,如果沒有單獨指定logger,那麼就會預設使用該root紀錄檔輸出。
本文主要講解了springboot 2.x整合log4j2的教學,希望對大家有幫助。
到此這篇關於SpringBoot 2.x整合Log4j2紀錄檔的文章就介紹到這了,更多相關SpringBoot2.x整合Log4j2紀錄檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45