log4j 巨大bug升級


Pom 配置修改:

 剔除低版本的  log4j jar 包

 <dependency>
            <artifactId>pwp-sysmng</artifactId>
            <groupId>com.todaytech.pwp</groupId>
            <version>${pwp.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>standard</artifactId>
                    <groupId>taglibs</groupId>
                </exclusion>
                <!--20211212 處理日志jar包漏洞 升級jar包-->
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

增加高版本的jar包

 <!--20211212 處理日志jar包漏洞 升級jar包-->
        <!--升級log4j 1.2.16 系列相關的jar包-->
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.15.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.15.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.15.0</version>
        </dependency>

log4j2.properties 配置文件配置內容

status = error

property.LOG_HOME=h:/output/logs
property.BACKUP_HOME=backup
property.SERVER_NAME=buddie-Service
property.EVERY_FILE_SIZE=100M
property.OUTPUT_LOG_LEVEL=INFO
property.FILE_MAX=10

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout

# 格式名 含義
# %c 輸出日志信息所屬的類的全名
# %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
# %f 輸出日志信息所屬的類的類名
# %F:輸出日志消息產生時所在的文件名稱。
# %l:輸出日志事件的發生位置,相當於%c.%M(%F:%L)的組合,包括類全名、方法、文件名以及在代碼中的行數。例如:test.TestLog4j.main(TestLog4j.java:10)。
# %L::輸出代碼中的行號。
# %m 輸出代碼中指定的信息,如log(message)中的message
# %M 輸出打印該條日志的方法名
# %n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”
# %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推
# %r 輸出自應用啟動到輸出該日志信息所耗費的毫秒數
# %t 輸出產生該日志事件的線程名
# %x:輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
# %%:輸出一個"%"字符。
# 另外,還可以在%與格式字符之間加上修飾符來控制其最小長度、最大長度、和文本的對齊方式。如:
# 1) c:指定輸出category的名稱,最小的長度是20,如果category的名稱長度小於20的話,默認的情況下右對齊。
# 2)%-20c:"-"號表示左對齊。
# 3)%.30c:指定輸出category的名稱,最大的長度是30,如果category的名稱長度大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會補空格。


appender.console.layout.pattern =%-d{yyyy-MM-dd HH,SSS} %p %C{1.} [%t] %m%n
appender.console.layout.charset=GBK
# 級別過濾(過濾日志記錄)
appender.console.filter.threshold.type = ThresholdFilter
# 只記錄debug級別以上的日志,大小寫無關:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)
appender.console.filter.threshold.level = DEBUG


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 = debug
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.all.ref = RollingFileAll
rootLogger.appenderRef.error.ref = RollingFileError

 

如何找出jar包的依賴來源(idea)

 

Maven 組件界面介紹

 

 

 

  • 如上圖標注 1 所示,為常用的 Maven 工具欄,其中最常用的有:

    • 第一個按鈕:Reimport All Maven Projects 表示根據 pom.xml 重新載入項目。一般單我們在 pom.xml 添加了依賴包或是插件的時候,發現標注 4 的依賴區中沒有看到最新寫的依賴的話,可以嘗試點擊此按鈕進行項目的重新載入。
    • 第六個按鈕:Execute Maven Goal 彈出可執行的 Maven 命令的輸入框。有些情況下我們需要通過書寫某些執行命令來構建項目,就可以通過此按鈕。
    • 第九個按鈕:Show Dependencies 顯示項目依賴的結構圖,可以方便我們直觀項目的依賴包情況。這個功能有些具體的操作下面會專門進行講解。
  • 如上圖標注 2 所示,常用的 Maven 生命周期的命令,通過雙擊對應的命令來執行項目編譯、打包、部署等操作。

  • 如上圖標注 3 所示,為我們在 pom.xml 中配置的插件列表,方便調用插件。

  • 如上圖標注 4 所示,為我們在 pom.xml 中配置的依賴包列表。

  • 如上圖標注 5 所示,為常見的 Java Web 在 Maven 下的一個項目結構。

大致了解過后,看怎么查看所有jar包的依賴關系。

 

 

 2017.2.6版本之后,這個圖標的樣子變啦

 

 

 

點完之后就會有下圖

 

 

 

可以看到,這個maven項目的所有jar包依賴關系,一覽無余。

為什么我的這個jar包依賴這么少呢,因為我這個項目只是簡單示范了一下springmvc框架的使用。所以,也沒有引入過多的jar包,要是在一個大一點的項目里面,你使用定時任務了,使用poi了使用等等一些其他工具類的包,那么就會很多了。

下面說一些小技巧

自動適配這個頁面的大小。

右鍵,這個地方,如圖,就可以調整到,適合大小。左上角那個放大鏡邊上,也有這個按鈕。

不用自己去放大縮小的,找不到合適點。

 

這地方有個小技巧,也許有的人不知道呢,就是這有放大鏡功能。不是簡單的點上面給的圖標,放大,那個放大也不方便不是?

Windows電腦可以按alt鍵,頁面上就會出現個大的圓圈,也就是傳說中的放大鏡了,這么一來就可以看的方便一點了。

具體看圖:

 

 依賴包沖突

圖中的紅色實線就算是沖突的,可以入上圖那樣,右鍵,排除,他就自動在pom文件里面給exclud啦。

還有一種是虛線的紅線。

這種虛線,告訴你同一個jar都在哪里被多次引用了。

 

上面的都是理論姿勢,那么實際中怎么使用呢?

比如下面的這個pom.xml里面有這么2個dependency的引入。

[html]   view plain   copy
 
 
 
  1. <dependency>  
  2.     <groupId>org.springframework</groupId>  
  3.     <artifactId>spring-webmvc</artifactId>  
  4.     <version>${org.springframework-version}</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.springframework</groupId>  
  8.     <artifactId>spring-web</artifactId>  
  9.     <version>${org.springframework-version}</version>  
  10. </dependency>  

可以看到,如果你不是很了解spring相關的包依賴的話,你就不知道你上面的引入,其實只需要引入一個依賴就可以了。如下:

 

 

[html]   view plain   copy
 
 
 
  1. <dependency>  
  2.     <groupId>org.springframework</groupId>  
  3.     <artifactId>spring-webmvc</artifactId>  
  4.     <version>${org.springframework-version}</version>  
  5. </dependency>  

因為,從上面的第一個依賴關系圖可以看出來,spring-webmvc是依賴於spring-web的,所以,他是會自動的去添加這個jar包的。

 

 

額,其實,就算知道了,也不一定會去改,你也看到了,我們項目里面那么多紅線,但是項目依然可以健康的跑起來。基本上算是尾大不掉的局面啦。這個要是一開始就注意這個問題的話,那么項目看起來還是比較 整潔的。

 

最后,濕胸我說的這么詳細,各位觀眾,有錢的捧個錢場,沒錢的捧個人場。點個贊,留個言啥的,好不好呀。

#log4j2.properties#用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,會看到log4j2內部各種詳細輸出#(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)status = debugdest = errname = PropertiesConfig

#日志文件名稱  指定日志文件的位置和文件名稱,以便記錄多份日志時,直接引用#property.filename = d:/logs/rollingtest.logproperty.filename = h:/zhpfds_logs/DEBUG.log#%n-換行#%m-日志內容#%p-日志級別(FATAL,ERROR,WARN...)#%F-java源文件名#%t 輸出產生該日志事件的線程名#%d 輸出日志時間點的日期或時間#%L-java源碼行數#%C-java類名#%M-java方法名#%l-輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數property.layoutPattern = %-d{yyyy-MM-dd HH,SSS} %p %C{1.} [%t] %m%n
# 級別過濾(過濾日志記錄)filter.threshold.type = ThresholdFilter# 只記錄debug級別以上的日志,大小寫無關:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)filter.threshold.level = debug
# 控制台類型的日志輸出源appender.console.type = Console# 輸出源的名稱appender.console.name = STDOUT#輸出類型appender.console.target = SYSTEM_OUT# 輸出布局類型appender.console.layout.type = PatternLayout# 輸出模板appender.console.layout.pattern = ${layoutPattern}# 級別過濾(過濾日志記錄)appender.console.filter.threshold.type = ThresholdFilter# 只記錄debug級別以上的日志,大小寫無關:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)appender.console.filter.threshold.level = DEBUG


# 文件日志輸出源:文件滾動記錄類型的日志輸出源appender.rolling.type = RollingFile#輸入源名稱  指定當前滾動輸出源的名稱appender.rolling.name = RollingFile#日志文件名:指定當前日志文件的位置和文件名稱,可以單獨指定,也可以直接引用之前定義過得property.filename參數appender.rolling.fileName = ${filename}#指定當發生文件滾動時,文件重命名規則 :指定當發生Rolling時,文件的轉移和重命名規則appender.rolling.filePattern = h:/zhpfds_logs/DEBUG-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz# 滾動記錄輸出源布局類型appender.rolling.layout.type = PatternLayout# 滾動記錄輸出模板  %-d{yyyy-MM-dd HH:mm:ss,SSS} %p %C{1.} [%t] %m%nappender.rolling.layout.pattern = ${layoutPattern}# 指定記錄文件的保存策略,該策略主要是完成周期性的日志文件保存工作:appender.rolling.policies.type = Policies# 基於時間的觸發策略(TriggeringPolicy)appender.rolling.policies.time.type = TimeBasedTriggeringPolicy# 當前記錄周期為每2秒生成一個文件,如果filePattern中配置的文件重命名規則是test1-%d{yyyy-MM-dd HH-mm}-%i,#最小的時間粒度是mm,即分鍾,TimeBasedTriggeringPolicy指定的size是1,結合起來就是每2分鍾生成一個新文件。#如果改成%d{yyyy-MM-dd HH},最小粒度為小時,則每2個小時生成一個文件。appender.rolling.policies.time.interval = 2# 是否對保存時間進行限制。若modulate=true,則保存時間將以0點為邊界進行偏移計算。#比如,modulate=true,interval=4hours,#那么假設上次保存日志的時間為03:00,則下次保存日志的時間為04:00,之后的保存時間依次為08:00,12:00,16:00appender.rolling.policies.time.modulate = true# 基於日志文件大小的觸發策略appender.rolling.policies.size.type = SizeBasedTriggeringPolicy# 當日志文件大小大於size指定的值時,觸發滾動appender.rolling.policies.size.size=100MB# 文件保存的覆蓋策略(RolloverStrategy)appender.rolling.strategy.type = DefaultRolloverStrategy# 生成分割(保存)文件的個數,默認為5(-1,-2,-3,-4,-5)appender.rolling.strategy.max = 5appender.rolling.filter.threshold.type=ThresholdFilterappender.rolling.filter.threshold.level=DEBUG
# 記錄器名稱   com.example.my.applogger.rolling.name = com.video.demo# 設置日志級別logger.rolling.level = debug# 是否向上級logger傳遞信息logger.rolling.additivity = true
# 關聯名稱為RollingFile的輸出源(appender)logger.rolling.appenderRef.rolling.ref = RollingFile

#設置SpringFramework框架的日志級別,一般業務上不需要其它使用了log4j的框架輸出日志logger.SpringFramework.name = org.springframeworklogger.SpringFramework.level = INFO
#當有其它框架的也使用了log4j時,會輸出相應日志,以下方式為屏蔽其它框架的日志信息(設置日志級別)#logger.Http.name = org.apache.http#logger.Http.level = TRACE

# 根記錄器,所有記錄器的父輩rootLogger.level = debug
# 關聯名稱為STDOUT的輸出源(appender)rootLogger.appenderRef.stdout.ref = STDOUT


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM