開發時會碰到maven
的問題,就要排查Lib目錄下哪一個Jar文件中有log4j.xml或是log4j.properties配置文件(log4j.xml文件優於log4j.properties生效)。理想狀況是隻會有一個log4j配置文件,實際上經常在二方庫中也有。ide
而後看看裏面的配置,必要的時候要刪除或是修改。post
find -iname '*.jar' | while read jarfile do jar tf $jarfile | grep 'log4j\.properties\|log4j\.xml' | while read item do echo "$jarfile"\!"$item" done done
即用Find命令找出Jar文件,用jar命令list中Jar中文件名,grep到log4j.properties後,輸出成url
path/to/file.jar!path/to/log4j.properties
的格式,jar文件和jar裏面的文件用!分隔。命令行
這裏使用jar tf來列出Jar文件中的文件名,也能夠使用unzip –l命令。Jar文件便是Zip格式。日誌
可是zip -l列出的輸出格式是code
$ unzip -l foo.jar Archive: foo.jar Length Date Time Name --------- ---------- ----- ---- 0 2012-01-11 18:55 META-INF/ 571 2012-01-11 18:55 META-INF/MANIFEST.MF 0 2012-01-11 18:55 META-INF/maven/ 165 2012-01-11 18:55 META-INF/INDEX.LIST ...... --------- ------- 3430 8 files
我尚未找到不輸出頭和尾信息的選項。這裏要組合一些命令來去了。xml
find -iname '*.jar' -exec sh -c \ 'jar tf $0 | grep 'log4j\.properties\|log4j\.xml' | xargs -r printf "$0!%s\n"' {} \;
輸出和實現一相同,要短一些,但可讀性差些。blog
這個實現有些潛在的問題:(上面的實現一中沒有這些問題)ip
能夠把實現作成腳本,加上腳本參數,方便複用執行,如:把要找的Jar文件名模式,在Jar文件的文件夾,Jar文件裏要查找文件名的模式,等等。