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的引入。
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${org.springframework-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>${org.springframework-version}</version>
- </dependency>
可以看到,如果你不是很了解spring相關的包依賴的話,你就不知道你上面的引入,其實只需要引入一個依賴就可以了。如下:
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${org.springframework-version}</version>
- </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