最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于log4j2.properties踩坑與填坑

 更新時(shí)間:2021年12月24日 10:38:33   作者:weixin_34023982  
這篇文章主要介紹了log4j2.properties踩坑與填坑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

log4j2.properties踩坑與填坑

日志配置

門面模式:slf4j

日志庫(kù):log4j2

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

采坑

啟動(dòng)Application時(shí),出現(xiàn)Multiple bindings were found on the class path的問題

  • 坑點(diǎn):沒有排除對(duì)默認(rèn)logback的依賴
  • 填坑:在build.gradle中加入:
configurations {
    compile.exclude module: 'spring-boot-starter-logging'
}

啟動(dòng)后,沒有按照配置好的格式輸出

  • 坑點(diǎn):沒有在application.[yml|properties]中聲明配置文件的路徑
  • 填坑:在application.yml中加入
#指定log4j2配置文件的位置與名稱
logging:
  config: classpath:log4j2.properties

格式化日志輸出參數(shù)

  • %m 輸出代碼中指定的消息
  • %p 輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
  • %r 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
  • %c 輸出所屬的類目,通常就是所在類的全名
  • %t 輸出產(chǎn)生該日志事件的線程名
  • %n 輸出一個(gè)回車換行符,Windows平臺(tái)為“rn”,Unix平臺(tái)為“n”
  • %d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
  • %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
  • %F 輸出日志消息產(chǎn)生時(shí)所在的文件名稱
  • %L 輸出代碼中的行號(hào)
  • %x 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),像java servlets多客戶多線程的應(yīng)用中
  • %% 輸出一個(gè)"%"字符

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

  • %5c: 輸出category名稱,最小寬度是5,category<5,默認(rèn)的情況下右對(duì)齊
  • %-5c:輸出category名稱,最小寬度是5,category<5,"-"號(hào)指定左對(duì)齊,會(huì)有空格
  • %.5c:輸出category名稱,最大寬度是5,category>5,就會(huì)將左邊多出的字符截掉,<5不會(huì)有空格
  • %20.30c:category名稱<20補(bǔ)空格,并且右對(duì)齊,>30字符,就從左邊交遠(yuǎn)銷出的字符截掉

記錄一份自己的配置文件

實(shí)現(xiàn)控制臺(tái)打印,以及基于時(shí)間和基于文件大小的本地保存策略。

name=PropertiesConfig
# 定義變量。指定日志文件的位置和文件名稱,以便記錄多份日志時(shí),直接引用
property.fileName=qiyinzone
property.fileDir=./logs
property.filePath=${fileDir}/${fileName}.log
appenders=console, rolling
 
# rootLogger, 根記錄器,所有記錄器的父輩
# 指定根日志的級(jí)別
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}
# 指定當(dāng)發(fā)生Rolling時(shí),文件的轉(zhuǎn)移和重命名規(guī)則
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
# 基于時(shí)間的觸發(fā)策略
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
# 當(dāng)前記錄周期為每1h生成一個(gè)文件
appender.rolling.policies.time.interval=1
appender.rolling.policies.time.modulate=true
# 基于日志文件體積的觸發(fā)策略
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
# 當(dāng)日志文件體積大于size指定的值時(shí),觸發(fā)Rolling
appender.rolling.policies.size.size=20M
# 文件封存的覆蓋策略
appender.rolling.strategy.type=DefaultRolloverStrategy
# 生成分割(封存)文件的個(gè)數(shù)
appender.rolling.strategy.max=100

打印效果

打印時(shí),對(duì)不同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配置文件

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

Log4j2 一開始拋棄了properties配置文件格式,到2.4版本時(shí),又開始支持properties配置文件格式。到2.6版本又有新的要求。我用的是寫本文時(shí)的最近版本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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 舉例詳解Java中的訪問權(quán)限修飾符

    舉例詳解Java中的訪問權(quán)限修飾符

    這篇文章主要介紹了舉例詳解Java中的訪問權(quán)限修飾符,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • 淺談Spring中單例Bean是線程安全的嗎

    淺談Spring中單例Bean是線程安全的嗎

    這篇文章主要介紹了淺談Spring中單例Bean是線程安全的嗎?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot項(xiàng)目創(chuàng)建單元測(cè)試的流程步驟

    SpringBoot項(xiàng)目創(chuàng)建單元測(cè)試的流程步驟

    在日常開發(fā)的過程中,對(duì)自己的代碼進(jìn)行單元測(cè)試是個(gè)非常重要的過程,一方面可以最小范圍的針對(duì)一個(gè)方法進(jìn)行測(cè)試,提高測(cè)試的簡(jiǎn)便性以及測(cè)試的成本,本篇文章主要是為了總結(jié)一下如何優(yōu)雅的在Springboot項(xiàng)目中使用單元測(cè)試去測(cè)試功能,需要的朋友可以參考下
    2024-11-11
  • Java讀取數(shù)據(jù)庫(kù)表的示例代碼

    Java讀取數(shù)據(jù)庫(kù)表的示例代碼

    這篇文章主要介紹了Java讀取數(shù)據(jù)庫(kù)表,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java數(shù)組常見應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】

    Java數(shù)組常見應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】

    這篇文章主要介紹了Java數(shù)組常見應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了java數(shù)組的基本定義、創(chuàng)建、遍歷、排序、查找等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • 關(guān)于SpringMVC對(duì)Restful風(fēng)格的支持詳解

    關(guān)于SpringMVC對(duì)Restful風(fēng)格的支持詳解

    Restful就是一個(gè)資源定位及資源操作的風(fēng)格,不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格,是對(duì)http協(xié)議的詮釋,下面這篇文章主要給大家介紹了關(guān)于SpringMVC對(duì)Restful風(fēng)格支持的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁(yè)查詢的實(shí)例

    oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁(yè)查詢的實(shí)例

    本文主要介紹了oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁(yè)查詢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot項(xiàng)目如何連接MySQL8.0數(shù)據(jù)庫(kù)

    SpringBoot項(xiàng)目如何連接MySQL8.0數(shù)據(jù)庫(kù)

    這篇文章主要介紹了SpringBoot項(xiàng)目如何連接MySQL8.0數(shù)據(jù)庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • mybatis實(shí)現(xiàn)批量修改-xml方式

    mybatis實(shí)現(xiàn)批量修改-xml方式

    這篇文章主要介紹了mybatis實(shí)現(xiàn)批量修改-xml方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序判斷

    java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序判斷

    對(duì)靜態(tài)代碼塊以及構(gòu)造函數(shù)的執(zhí)行先后順序,一直很迷惑,直到最近看到一段代碼,發(fā)現(xiàn)終于弄懂了,所以這篇文章主要給大家介紹了關(guān)于如何判斷java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論

肥乡县| 江源县| 衡东县| 凤城市| 邛崃市| 山阳县| 锡林浩特市| 武川县| 达尔| 精河县| 方山县| 同仁县| 高雄县| 荃湾区| 平安县| 太保市| 花垣县| 浠水县| 苏尼特右旗| 班戈县| 嘉鱼县| 三河市| 宾阳县| 固镇县| 舞钢市| 公主岭市| 蛟河市| 吴忠市| 大埔县| 友谊县| 临潭县| 咸丰县| 论坛| 天津市| 韶山市| 吴堡县| 济南市| 湟源县| 教育| 桐城市| 北辰区|