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

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:154日期:2022-08-22 14:52:46
1 日志路徑帶來的痛點(diǎn)

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

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

2 log4j.properties文件的配置

# 設(shè)置要輸出的日志的級別 - 注意: properties文件中的注釋信息只能處于行首, 不要跟在行尾log4j.rootLogger=INFO,stdout,logfile### 輸出到控制臺, Java程序運(yùn)行時的標(biāo)準(zhǔn)輸出信息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# 項(xiàng)目的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 徹底解決痛點(diǎn)

3.1 單獨(dú)的Java程序包 (非Java Web項(xiàng)目)

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

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

(1) 啟動腳本設(shè)置:

假設(shè)當(dāng)前項(xiàng)目的目錄結(jié)構(gòu)為:

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

啟動腳本位于bin目錄下, 內(nèi)容示例如下:

# 獲取當(dāng)前腳本所處的目錄, 然后進(jìn)入其上級目錄, 最后pwd輸出該目錄, 最終的結(jié)果是/Project/KafkaConsumerbase_dir=$(cd `dirname $0`; cd ..; pwd)# 獲取Java運(yùn)行程序的位置, 并指定主類java_bin=$(which java)main_class='org.shoufeng.elastic.ConsumerMain'# 通過-cp、擴(kuò)展CLASSPATH、指定主類的方式啟動項(xiàng)目, # 并通過“-D”的方式向此程序的運(yùn)行時環(huán)境中設(shè)置當(dāng)前項(xiàng)目的路徑,# 即可在程序中通過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程序讀取變量:

實(shí)log4j的FileAppender本身支持動態(tài)設(shè)置文件路徑, 如:

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

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

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

需要注意的是, 這種方式設(shè)置的環(huán)境變量只在當(dāng)前Java進(jìn)程(也就是當(dāng)前項(xiàng)目)中有效, 并不會影響到其他項(xiàng)目.

3.2 Web項(xiàng)目

如果是Web項(xiàng)目, 可通過修改Web容器的環(huán)境變量方式實(shí)現(xiàn). 以 Tomcat 為例:

# log4j的配置文件支持服務(wù)器的vm環(huán)境變量, 格式類似${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參數(shù)設(shè)置的:

-Dcatalina.home='$CATALINA_HOME'

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

4 附錄 - 獲取當(dāng)前項(xiàng)目、類路徑的幾種方式

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

補(bǔ)充知識:在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文件會存放在哪呢?

經(jīng)測試發(fā)現(xiàn),test.log這個相對路徑相對的是user.dir系統(tǒng)參數(shù)的值。

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

問題二:

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

經(jīng)測試發(fā)現(xiàn),/test.log這個絕對路徑的根路徑是user.dir系統(tǒng)參數(shù)的根路徑,即test.log會存放在D:test.log。

補(bǔ)充:

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

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

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美福利在线| 亚洲久草在线| 国产精品天天看天天狠| 日韩av一级片| 中文精品电影| 天使萌一区二区三区免费观看| 黄色亚洲精品| 久久国产精品久久久久久电车| 在线综合亚洲| 日韩欧美三区| 国产精品毛片久久久| 久久精品国产999大香线蕉| 精品一区二区三区在线观看视频| 老鸭窝一区二区久久精品| 精品视频一区二区三区四区五区| 卡一精品卡二卡三网站乱码| 亚洲女同av| 亚洲天堂久久| 久久午夜影视| 一二三区精品| 国产精品伦一区二区| 亚洲三级欧美| 久久精品国产68国产精品亚洲| 欧美日韩免费观看一区=区三区 | 日本а中文在线天堂| 日韩免费小视频| 欧美精品自拍| 欧美一区二区三区免费看| 精品久久国产一区| 亚洲性视频h| 免费看日韩精品| 国产精品一区二区三区www| 国产成人77亚洲精品www| 久久网站免费观看| 综合一区在线| 都市激情国产精品| 在线亚洲观看| 欧美激情aⅴ一区二区三区| 精精国产xxxx视频在线野外| 日韩专区欧美专区| 精品国产亚洲一区二区三区| 视频一区中文| 国产日产一区| 999久久久91| 日韩av不卡在线观看| 国产不卡人人| 亚洲tv在线| 麻豆视频在线观看免费网站黄 | 免费一区二区三区在线视频| 久久九九精品| 日本午夜精品一区二区三区电影| 成人午夜网址| 中文精品电影| 91一区二区| 亚洲丝袜啪啪| 久久精品五月| 蜜臀va亚洲va欧美va天堂 | 国产亚洲亚洲| 精品入口麻豆88视频| 婷婷久久一区| 美女久久久久久 | 国产精品成人**免费视频 | 激情久久久久久| 欧美视频精品全部免费观看| 国精品一区二区三区| 日本va欧美va精品| 免费黄色成人| 麻豆精品久久| 免费成人av在线播放| 欧美国产美女| 国产欧美二区| 久久www成人_看片免费不卡| 精品一区二区三区中文字幕| 蜜臀久久99精品久久久久久9| аⅴ资源天堂资源库在线| 亚洲开心激情| 欧美精选一区二区三区| 国产高清精品二区| 另类激情亚洲| 久久精品免费一区二区三区 | 国产一区91| 日韩视频网站在线观看| 国产精品高清一区二区| 蜜桃视频一区二区三区| 亚洲精品一区三区三区在线观看| 国产乱人伦精品一区| 免费视频一区二区| 久久亚洲国产| 日本午夜大片a在线观看| 91成人在线| 美女黄网久久| 五月天激情综合网| 成人羞羞视频播放网站| 久久精品资源| 国产精品久久久久久久久免费高清 | 首页国产精品| 国产精品777777在线播放 | 午夜天堂精品久久久久| 国产农村妇女精品一二区| 人人精品亚洲| 在线手机中文字幕| 国产一区二区精品福利地址| 国产精品videossex久久发布| 日韩av在线免费观看不卡| 蜜桃久久久久久| 免费视频久久| 国产免费成人| 亚洲美洲欧洲综合国产一区| 91精品一区国产高清在线gif| yellow在线观看网址| 精品淫伦v久久水蜜桃| 欧美黑人巨大videos精品| 日韩欧美中文在线观看| 天海翼亚洲一区二区三区| 影音先锋久久精品| 日韩精品一级中文字幕精品视频免费观看 | 国产一区导航| 99精品99| 午夜国产欧美理论在线播放 | 激情久久五月| 亚洲国产一区二区在线观看 | 精品一区二区三区免费看| 国产精品亚洲一区二区在线观看| 欧美另类中文字幕| 欧美日韩xxxx| 国产剧情在线观看一区| 91精品尤物| 91精品国产经典在线观看| 欧美日一区二区三区在线观看国产免| 91精品国产自产观看在线| 欧美午夜网站| 国产精品一在线观看| 国产精品蜜月aⅴ在线| 国产精品2区| 欧美国产美女| 久久精品播放| 亚洲女人av| 日韩一区二区三区精品| 亚洲1区在线观看| 国产精品多人| 日韩黄色大片| 免费毛片在线不卡| 蜜臀精品一区二区三区在线观看 | 婷婷激情图片久久| 日韩中文字幕一区二区三区| 日韩精品1区2区3区| 国产日韩欧美三级| 国产一区二区三区四区五区| 日本а中文在线天堂| 欧洲激情综合| 六月丁香综合| 国产精品国码视频| 亚洲天堂1区| 樱桃成人精品视频在线播放| 亚洲精品一区二区在线播放∴| 日本午夜精品一区二区三区电影| 久久精品国产亚洲一区二区三区| 久久精品国语| 日韩1区2区3区| 成人午夜在线| 黄色亚洲在线| 国产精品一区亚洲| 日本国产精品| 亚洲精品高潮| 成午夜精品一区二区三区软件| 亚洲午夜精品久久久久久app| 亚洲精品裸体| av资源中文在线| 午夜欧美视频| 国产日产精品_国产精品毛片 | 日韩中文字幕区一区有砖一区| 久久狠狠久久| 日韩中文首页| 亚洲色图综合| 老司机免费视频一区二区三区| 国产精品久久久久久久久久10秀 | 蜜桃av一区二区| 精品国产aⅴ| 久热精品在线| 成人台湾亚洲精品一区二区| 欧美中文日韩| 97精品一区| 天堂久久av| 日韩成人高清| 欧美私人啪啪vps| 今天的高清视频免费播放成人| 日韩国产欧美视频| 精品欧美激情在线观看| 国产探花在线精品一区二区| 91精品国产91久久久久久黑人| 天堂va在线高清一区| 日韩欧美一区二区三区免费看| 日韩一区精品视频| 中文字幕一区久| 日本成人在线网站| 久久精品成人| 欧美激情视频一区二区三区免费 | 免费久久99精品国产| 麻豆视频在线观看免费网站黄| 日韩在线麻豆|