亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于log4j2.properties踩坑與填坑的示例分析

發布時間:2021-12-24 11:36:12 來源:億速云 閱讀:166 作者:小新 欄目:開發技術

這篇文章主要介紹基于log4j2.properties踩坑與填坑的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

log4j2.properties踩坑與填坑

日志配置

門面模式:slf4j

日志庫:log4j2

引入依賴:compile('org.springframework.boot:spring-boot-starter-log4j2:2.0.4.RELEASE')

采坑

啟動Application時,出現Multiple bindings were found on the class path的問題

  • 坑點:沒有排除對默認logback的依賴

  • 填坑:在build.gradle中加入:

configurations {
    compile.exclude module: 'spring-boot-starter-logging'
}

啟動后,沒有按照配置好的格式輸出

  • 坑點:沒有在application.[yml|properties]中聲明配置文件的路徑

  • 填坑:在application.yml中加入

#指定log4j2配置文件的位置與名稱
logging:
  config: classpath:log4j2.properties

格式化日志輸出參數

  • %m 輸出代碼中指定的消息

  • %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL

  • %r 輸出自應用啟動到輸出該log信息耗費的毫秒數

  • %c 輸出所屬的類目,通常就是所在類的全名

  • %t 輸出產生該日志事件的線程名

  • %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”

  • %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921

  • %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

  • %F 輸出日志消息產生時所在的文件名稱

  • %L 輸出代碼中的行號

  • %x 輸出和當前線程相關聯的NDC(嵌套診斷環境),像java servlets多客戶多線程的應用中

  • %% 輸出一個"%"字符

可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:

  • %5c: 輸出category名稱,最小寬度是5,category<5,默認的情況下右對齊

  • %-5c:輸出category名稱,最小寬度是5,category<5,"-"號指定左對齊,會有空格

  • %.5c:輸出category名稱,最大寬度是5,category>5,就會將左邊多出的字符截掉,<5不會有空格

  • %20.30c:category名稱<20補空格,并且右對齊,>30字符,就從左邊交遠銷出的字符截掉

記錄一份自己的配置文件

實現控制臺打印,以及基于時間和基于文件大小的本地保存策略。

name=PropertiesConfig
# 定義變量。指定日志文件的位置和文件名稱,以便記錄多份日志時,直接引用
property.fileName=qiyinzone
property.fileDir=./logs
property.filePath=${fileDir}/${fileName}.log
appenders=console, rolling
 
# rootLogger, 根記錄器,所有記錄器的父輩
# 指定根日志的級別
rootLogger.level=info
# 指定輸出的appender引用
rootLogger.appenderRef.stdout.ref=Stdout
rootLogger.appenderRef.rolling.ref=InfoRollingFile
 
# console
# 指定輸出源的類型與名稱
appender.console.type=Console
appender.console.name=Stdout
appender.console.layout.type=PatternLayout
# 輸出模板
appender.console.layout.pattern=%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}
 
# rolling file
appender.rolling.type=RollingFile
appender.rolling.name=InfoRollingFile
appender.rolling.fileName=${filePath}
# 指定當發生Rolling時,文件的轉移和重命名規則
appender.rolling.filePattern=${fileDir}/${fileName}_%d{yyyy-MM-dd}_%i.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}
# 指定記錄文件的封存策略,該策略主要是完成周期性的日志文件封存工作
appender.rolling.policies.type=Policies
# 基于時間的觸發策略
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
# 當前記錄周期為每1h生成一個文件
appender.rolling.policies.time.interval=1
appender.rolling.policies.time.modulate=true
# 基于日志文件體積的觸發策略
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
# 當日志文件體積大于size指定的值時,觸發Rolling
appender.rolling.policies.size.size=20M
# 文件封存的覆蓋策略
appender.rolling.strategy.type=DefaultRolloverStrategy
# 生成分割(封存)文件的個數
appender.rolling.strategy.max=100

打印效果

打印時,對不同level的日志定義了不同的字體顏色,方便定位。

%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}

Log4j2 properties配置文件

原工作組比較清閑,被臨時借調到新的工作組。組長給了個任務是把Log4j的XML配置文件改成properties,原因是XML格式的看著不舒服。哈,以上不算吐槽,只是交待一下,為什么我要這么費勁的使用properties做配置文件。

Log4j2 一開始拋棄了properties配置文件格式,到2.4版本時,又開始支持properties配置文件格式。到2.6版本又有新的要求。我用的是寫本文時的最近版本2.8

status = error
property.LOG_HOME=/output/logs
property.BACKUP_HOME=backup
property.SERVER_NAME=buddie-Service
property.EVERY_FILE_SIZE=10M
property.OUTPUT_LOG_LEVEL=INFO
property.FILE_MAX=10
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.rolling.type=RollingFile
appender.rolling.name=RollingFileAll
appender.rolling.filter.threshold.level = trace
appender.rolling.filter.threshold.type = ThresholdFilter
appender.rolling.fileName=${LOG_HOME}/dev_${SERVER_NAME}_all.log
appender.rolling.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_all.%d{yyyy-MM-dd-HH}.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d %p %C{1.} [%t] %m%n
appender.rolling.policies.type=Policies
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval=2
appender.rolling.policies.time.modulate=true
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=${EVERY_FILE_SIZE}
appender.rolling.strategy.type=DefaultRolloverStrategy
appender.error.type=RollingFile
appender.error.name=RollingFileError
appender.error.filter.threshold.level = error
appender.error.filter.threshold.type = ThresholdFilter
appender.error.fileName=${LOG_HOME}/dev_${SERVER_NAME}_error.log
appender.error.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_error.%d{yyyy-MM-dd-HH}.log
appender.error.layout.type=PatternLayout
appender.error.layout.pattern=%d %p %C{1.} [%t] %m%n
appender.error.policies.type=Policies
appender.error.policies.time.type=TimeBasedTriggeringPolicy
appender.error.policies.time.interval=2
appender.error.policies.time.modulate=true
appender.error.policies.size.type=SizeBasedTriggeringPolicy
appender.error.policies.size.size=${EVERY_FILE_SIZE}
appender.error.strategy.type=DefaultRolloverStrategy
appender.charge.type=RollingFile
appender.charge.name=RollingFileCharge
appender.charge.filter.threshold.level = trace
appender.charge.filter.threshold.type = ThresholdFilter
appender.charge.fileName=${LOG_HOME}/dev_${SERVER_NAME}_charge.log
appender.charge.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_charge.%d{yyyy-MM-dd-HH}.log
appender.charge.layout.type=PatternLayout
appender.charge.layout.pattern=%d %p %C{1.} [%t] %m%n
appender.charge.policies.type=Policies
appender.charge.policies.time.type=TimeBasedTriggeringPolicy
appender.charge.policies.time.interval=2
appender.charge.policies.time.modulate=true
appender.charge.policies.size.type=SizeBasedTriggeringPolicy
appender.charge.policies.size.size=${EVERY_FILE_SIZE}
appender.charge.strategy.type=DefaultRolloverStrategy
logger.activity.name = buddie.activity
logger.activity.level = debug
logger.activity.additivity = false
logger.activity.appenderRef.all.ref = RollingFileAll
logger.activity.appenderRef.error.ref = RollingFileError
logger.activity.appenderRef.stdout.ref = STDOUT
logger.login.name = buddie.login
logger.login.level = debug
logger.login.additivity = false
logger.login.appenderRef.all.ref = RollingFileAll
logger.login.appenderRef.error.ref = RollingFileError
logger.login.appenderRef.stdout.ref = STDOUT
logger.charge.name = buddie.charge
logger.charge.level = trace
logger.charge.additivity = false
logger.charge.appenderRef.all.ref = RollingFileAll
logger.charge.appenderRef.error.ref = RollingFileError
logger.charge.appenderRef.charge.ref = RollingFileCharge
logger.charge.appenderRef.stdout.ref = STDOUT
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.all.ref = RollingFileAll
rootLogger.appenderRef.error.ref = RollingFileError

以上是“基于log4j2.properties踩坑與填坑的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平利县| 醴陵市| 泰来县| 介休市| 肇源县| 英超| 渭南市| 塔城市| 四川省| 徐汇区| 文昌市| 临夏市| 金坛市| 郎溪县| 秭归县| 凌云县| 庆阳市| 乌兰浩特市| 阳朔县| 周至县| 清徐县| 文水县| 卢湾区| 布尔津县| 大港区| 沿河| 交城县| 吴堡县| 天门市| 云阳县| 滨海县| 马关县| 中超| 枣阳市| 开封县| 山西省| 师宗县| 花莲县| 电白县| 阳城县| 高台县|