日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 配置log4j日志文件路徑 (附-獲取當前類路徑的多種操作)

瀏覽:152日期:2022-08-22 14:52:46
1 日志路徑帶來的痛點

Java 項目中少不了要和log4j等日志框架打交道, 開發環境和生產環境下日志文件的輸出路徑總是不一致, 設置為絕對路徑的方式缺少了靈活性, 每次變更項目路徑都要修改文件, 目前想到的最佳實現方式是: 根據項目位置自動加載并配置文件路徑.

本文借鑒 Tomcat 的配置方式 “${catalina.home}/logs/catalina.out”, 通過相對路徑的方式設置日志的輸出路徑, 有其他解決方案的小伙伴, 請直接評論區交流哦😯

2 log4j.properties文件的配置

# 設置要輸出的日志的級別 - 注意: properties文件中的注釋信息只能處于行首, 不要跟在行尾log4j.rootLogger=INFO,stdout,logfile### 輸出到控制臺, Java程序運行時的標準輸出信息log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout# 2019-05-25 19:09:46log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t] [%c] [%p] - %m%n### 輸出到日志文件# 按天滾動生成, 不支持MaxFileSize, 而RollingFileAppender支持log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender# 項目的logs目錄下# log4j.appender.logfile.File=${base.dir}/logs/elastic-server.loglog4j.appender.logfile.Append=true# 輸出INFO及以上的日志, 按日期滾動就無須配置單個日志文件的最大體積了log4j.appender.logfile.Threshold=INFO# log4j.appender.logfile.MaxFileSize=100MBlog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t] [%c] [%p] - %m%n3 徹底解決痛點

3.1 單獨的Java程序包 (非Java Web項目)

單獨的Java程序包, 需要通過命令java -jar或java -cp的方式啟動;

我們可以在啟動命令中加入系統運行時變量, 在log4j加載配置文件之前通過System.getProperties('path')讀取此變量, 即可實現靈活加載當前路徑.

(1) 啟動腳本設置:

假設當前項目的目錄結構為:

/Projects/KafkaConsumer丨 bin 項目的啟動腳本丨 conf 項目的配置文件丨 lib 項目的其他依賴包丨 bogs 項目的日志輸出路徑

啟動腳本位于bin目錄下, 內容示例如下:

# 獲取當前腳本所處的目錄, 然后進入其上級目錄, 最后pwd輸出該目錄, 最終的結果是/Project/KafkaConsumerbase_dir=$(cd `dirname $0`; cd ..; pwd)# 獲取Java運行程序的位置, 并指定主類java_bin=$(which java)main_class='org.shoufeng.elastic.ConsumerMain'# 通過-cp、擴展CLASSPATH、指定主類的方式啟動項目, # 并通過“-D”的方式向此程序的運行時環境中設置當前項目的路徑,# 即可在程序中通過System.getProperty('base.dir')獲取此路徑 nohup ${java_bin} -Dbase.dir=${base_dir} -cp ${CLASSPATH}:${base_dir}/conf:${base_dir}/lib/* ${main_class} >> /dev/null &

(2) Java程序讀取變量:

實log4j的FileAppender本身支持動態設置文件路徑, 如:

log4j.appender.logfile.File=${base.log}/logs/app.log

其中“${base.log}”是一個變量, 會被System Property中的base.log的值代替, 代碼中的使用方式為:

public static void main(String[] args) { // 獲取系統運行時變量中的日志文件的輸出路徑 // 此變量需要在啟動命令中通過-D的方式設置 String baseDir = System.getProperty('base.dir'); if (baseDir == null) { // 開發環境中使用 baseDir = System.getProperty('user.dir'); System.setProperty('base.dir', baseDir); } log.info('==== 系統運行路徑: ' + System.getProperty('base.dir') + ' ===='); // 其他處理邏輯......}

需要注意的是, 這種方式設置的環境變量只在當前Java進程(也就是當前項目)中有效, 并不會影響到其他項目.

3.2 Web項目

如果是Web項目, 可通過修改Web容器的環境變量方式實現. 以 Tomcat 為例:

# log4j的配置文件支持服務器的vm環境變量, 格式類似${catalina.home} log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log log4j.appender.R.MaxFileSize=100MB

${catalina.home}是在${tomcat_home}/bin/catalina.sh中通過-D參數設置的:

-Dcatalina.home='$CATALINA_HOME'

基于這個思路, 我們也可以向Web容器的VM參數中設置一個參數, 比如-Dmylog.home='/Project/logs', 創建日志對象時即可使用.

4 附錄 - 獲取當前項目、類路徑的幾種方式

public static void main(String[] args) { // 獲取 class 文件的絕對路徑, 定位到具體的包名, 結果如: // /Projects/KafkaConsumer/target/classes/org/shoufeng/consumer/ System.out.println(KafkaConsumer.class.getResource('')); // 獲取 class 文件的絕對路徑, 如: /Projects/KafkaConsumer/target/classes/, // 如果在bin目錄下通過java -jar等命令啟動時, 結果就是 /Projects/KafkaConsumer/bin/ System.out.println(ClassLoader.getSystemResource('')); System.out.println(KafkaConsumer.class.getResource('/')); System.out.println(KafkaConsumer.class.getClassLoader().getResource('')); System.out.println(Thread.currentThread().getContextClassLoader().getResource('')); // 說明: 上述4種用法的返回結果類型都是URL, 其toString()返回的內容以'file:'開頭, 可通過“.toString().substring(5)”去除 // 推薦: 使用“.getPath()”就可以直接獲取到路徑 // 獲取工程的絕對路徑, 如: /Projects/KafkaConsumer, // 若在bin中通過java -jar等命令啟動, 路徑就變成了: /Projects/KafkaConsumer/bin System.out.println(System.getProperty('user.dir'));}

補充知識:在web中使用log4j時,配置日志文件的存放位置

廢話不多說,直接上代碼。

log4j.properties配置如下

log4j.rootLogger = info,out1,out2log4j.appender.out1=org.apache.log4j.FileAppenderlog4j.appender.out1.File=test.loglog4j.appender.out1.layout=org.apache.log4j.PatternLayoutlog4j.appender.out1.layout.ConversionPattern=%d %-5p - %m at %l%nlog4j.appender.out2=org.apache.log4j.ConsoleAppenderlog4j.appender.out2.layout=org.apache.log4j.PatternLayoutlog4j.appender.out2.layout.ConversionPattern=%d %-5p - %m at %l%n

問題一:這個test.log文件會存放在哪呢?

經測試發現,test.log這個相對路徑相對的是user.dir系統參數的值。

假如我的tomcat的安裝路徑為D:apache-tomcat-6.0.16,則user.dir=D:apache-tomcat-6.0.16bin,當不確定時,我們可以用System.getProperties()將所有的系統參數在jsp中打印出來。

問題二:

如果我們將test.log改為絕對路徑/test.log,這個test.log文件又會存放在哪呢?

經測試發現,/test.log這個絕對路徑的根路徑是user.dir系統參數的根路徑,即test.log會存放在D:test.log。

補充:

我們在log4j.properties文件中還可以通過${系統參數}的方式來指明日志文件存放路徑。

log4j.appender.out1.File=${user.dir}/logs/test.log

以上這篇Java 配置log4j日志文件路徑 (附-獲取當前類路徑的多種操作)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜视频一区二区在线观看| 1024精品久久久久久久久| 免费观看亚洲| 欧美xxxx中国| 日韩在线综合| 久久精品高清| 亚洲婷婷免费| 99亚洲视频| 喷白浆一区二区| 亚洲va久久久噜噜噜久久| 日韩高清电影一区| 国产精品欧美三级在线观看| 精品视频99| 日韩精品诱惑一区?区三区| 欧美中文字幕一区二区| 在线亚洲观看| 日韩精品免费观看视频| 国产精品视频一区视频二区| 欧美交a欧美精品喷水| 国内精品美女在线观看| 日本高清不卡一区二区三区视频 | 九九久久电影| 日韩精品一区第一页| 日本少妇一区二区| 久久99高清| 国产 日韩 欧美一区| 亚洲精品888| 亚洲精品精选| 国产精品超碰| 久久久久久久久久久妇女 | 日韩视频一区二区三区在线播放免费观看| 99xxxx成人网| 日本免费在线视频不卡一不卡二| 国产精品igao视频网网址不卡日韩| 91视频一区| 在线国产一区二区| 日韩av中文字幕一区| 日韩成人a**站| 久久av在线| 久久久亚洲欧洲日产| 国内精品福利| 日本va欧美va精品| 日韩高清欧美| 一本一道久久a久久| 国产亚洲第一伦理第一区| 欧美日韩国产v| 日韩一区二区三区四区五区| 日本激情一区| 亚洲视频电影在线| 国产一区国产二区国产三区| 欧美日韩视频| 欧美激情99| 美女久久久久| 国产精品永久| 99视频精品全国免费| 欧美三级第一页| 久久国产欧美| 青青草国产成人99久久| 九九色在线视频| 在线观看视频免费一区二区三区| 国产精品成人国产| 亚洲精品国产嫩草在线观看| 日韩三级精品| 99成人在线视频| 日韩不卡一二三区| 久久久久.com| 国产日产一区| 怡红院精品视频在线观看极品| 欧美aa在线视频| 男人的天堂亚洲一区| 国产h片在线观看| 四虎精品一区二区免费| 97人人精品| 青青草国产精品亚洲专区无| 久久久精品午夜少妇| 国产精品最新| 一区二区三区四区日韩| 日韩国产一区二区三区| 欧美日韩99| 免费一级片91| 成人羞羞在线观看网站| 国产精品一区三区在线观看| 国产毛片一区| 999久久久精品国产| 精品免费视频| 日韩一区二区三区免费视频| 婷婷综合亚洲| 国产va在线视频| 国产精品久久久久毛片大屁完整版| 国产一区导航| 久久精品影视| 成人在线视频免费看| 欧美日韩91| 亚洲专区视频| 99国产精品久久久久久久成人热| 日韩专区精品| www.九色在线| 国产成人精选| 久久伊人久久| 国产精品.xx视频.xxtv| 欧美久久久网站| 日韩精品免费视频一区二区三区| 亚洲欧美视频一区二区三区| 欧美日中文字幕| 波多野结衣久久精品| 国产一区二区三区四区五区| 国产福利一区二区精品秒拍 | 国产欧美日韩综合一区在线播放| 亚洲一区二区av| 视频一区二区中文字幕| 99在线精品免费视频九九视 | 99tv成人| 久久九九99| 久久国产主播| 尤物tv在线精品| 欧美日韩国产传媒| 91精品国产91久久久久久黑人| 亚洲一级少妇| 国产精品久久久久av电视剧| 国产一区一一区高清不卡| 免费看久久久| 国产精品qvod| 久久久久97| 国产精品久久久久久久久久10秀| 精品国产乱码久久久久久樱花| 欧美韩一区二区| 精品三级国产| www.com.cn成人| 亚洲天堂1区| 亚洲高清二区| 夜夜嗨一区二区| 伊人精品在线| 亚洲午夜久久| 欧美视频久久| 久久久国产精品入口麻豆| 久久97视频| 国产中文在线播放| 日韩一区三区| 午夜国产欧美理论在线播放| 男女性色大片免费观看一区二区| 亚洲三级观看| 国产精品一国产精品k频道56| 久久99影视| 欧美日韩精品免费观看视完整| 国产一区日韩一区| 视频一区二区不卡| 亚洲精品伦理| 国产伦理一区| 91中文字幕精品永久在线| 青青久久av| 日韩午夜黄色| 日韩精品成人| 免费一级欧美在线观看视频| 乱一区二区av| 欧美日韩视频网站| 国产99精品| 99视频精品全部免费在线视频| 日本欧美国产| 亚洲欧美日韩高清在线| 精品一区毛片| 一二三区精品| 美女视频黄 久久| 成人看片网站| 蜜桃一区二区三区在线观看| 日韩国产精品久久久| 国产一区二区三区免费在线| 久久九九99| 综合激情婷婷| 精品免费在线| 午夜在线播放视频欧美| 国产精品黄色| 婷婷激情久久| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 麻豆一区在线| 久久久久久久久久久妇女| 玖玖精品视频| 精品国产一区二区三区2021| 亚洲电影在线| 欧美亚洲色图校园春色| 亚洲www啪成人一区二区| 午夜精品影视国产一区在线麻豆| 精品91福利视频| 亚洲综合精品| 精品国内亚洲2022精品成人| 午夜久久影院| 久久av免费看| 国产模特精品视频久久久久| 国产日韩视频| 国产一区久久| 国产福利亚洲| 日韩精品一二三区| www.九色在线| 日韩国产在线观看一区| 91精品亚洲| 欧美天堂一区| 日韩午夜在线| 国产白浆在线免费观看| 日韩超碰人人爽人人做人人添| 91精品推荐| 久久免费影院|