這篇文章主要介紹正確使用Java日志的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、虛擬空間、營銷軟件、網站建設、江漢網站維護、網站推廣。關于日志,在大家的印象中都是比較簡單的,只須引入了相關依賴包,剩下的事情就是在項目中“盡情”的打印我們需要的信息了。但是往往越簡單的東西越容易讓我們忽視,從而導致一些不該有的bug發(fā)生,作為一名嚴謹的程序員,怎么能讓這種事情發(fā)生呢?所以下面我們就來了解一下關于日志的那些正確使用姿勢。
正文
日志規(guī)范
命名
首先是日志文件的命名,盡量要做到見名知意,團隊里面也必須使用統(tǒng)一的命名規(guī)范,不然“臟亂差”的日志文件會影響大家排查問題的效率。這里推薦以“projectName_logName_logType.log”來命名,這樣通過名字就可以清晰的知道該日志文件是屬于哪個項目,什么類型,有什么作用。例如在我們MessageServer項目中監(jiān)控Rabbitmq 消費者相關的日志文件名可以定義成“messageserver_rabbitmqconsumer_monitor.log”。
保存時間
關于日志保存的時間,普通的日志文件建議保留15天,若比較重要的可根據實際情況延長,具體請參考各自服務器磁盤空間以及日志文件大小作出最優(yōu)選擇。
日志級別
常見的日志級別有以下:
DEBUG級別:記錄調試程序相關的信息。INFO級別:記錄程序正常運行有意義的信息。WARN級別:記錄可能會出現潛在錯誤的信息。ERROR級別:記錄當前程序出錯的信息,需要被關注處理。Fatal級別:表示出現了嚴重錯誤,程序將會中斷執(zhí)行。
建議在項目中使用這四種級別, ERROR、WARN、INFO 、DEBUG。
正確姿勢
1、提前判斷日志級別
//條件判斷if(logger.isDebugEnabled){ logger.debug("server info , id : " + id + ", user : " + user); }//使用占位符logger.debug("server info , id : {}, user : {}",id,user);
對于DEBUG,INFO級別的日志,在我們的程序中是比較高頻的存在,當我們的項目大了,日志變多了,這時候為了程序運行的效率,我們必須以條件判斷或者占位符的方式來打印日志。為什么呢?假如我們項目中配置的日志級別為WARN,那么對于我們下面的日志輸出語句‘ logger.debug("server info , id : " + id + ", user : " + user);’,雖然該日志不會被打印,但是卻會執(zhí)行字符串拼接的操作,這里我們的user是一個實例對象,所以還會執(zhí)行toString方法,這樣就白白浪費了不少系統(tǒng)的資源。
2、避免多余日志輸出
在我們的生產環(huán)境中,一般禁止DEBUG日志的輸出,其打印的頻率是非常高的,容易對正常運行的程序造成嚴重的影響,在我們最近的項目中就有遇到過類似的情況。
那么這時候該學會使用additivity屬性
<logger name="xx" additivity="true">
在這邊配置成true的話,也就是默認的情況,這時候當前Logger會繼承父Logger的Appender,說白了就是當前日志的輸出除了輸出在當前日志文件以外,還會輸出至父文件里。所以一般情況下,我們?yōu)榱吮苊庵貜痛蛴?,會將這個參數設置成false,以減少不必要的輸出。
3、保證日志記錄信息完整
在我們的代碼中,日志記錄的內容要包含異常的堆棧,請勿隨意輸出“XX出錯”等簡單的日志,這對于錯誤的調試毫無幫助。所以我們在記錄異常的時候一定要帶上堆棧信息,例如
logger.error("rabbitmq consumer error,cause : "+e.getMessage(),e);
切記在輸出對象實例的時候,須確保對象重寫了toString方法,否則只會輸出其hashCode值。
4、定義logger變量為static
private static final Logger logger = LoggerFactory.getLogger(XX.class);
確保一個對象只使用一個Logger對象,避免每次都重新創(chuàng)建,否則可能會導致OOM。
5、正確使用日志級別
try{ //..}catch(xx){ logger.info(..); }
這樣一來,本來是ERROR的信息,全都打印在INFO日志文件里了,不知情的同事還會在死盯著錯誤日志,而且還找不出問題,多影響工作效率是吧?
6、推薦使用slf4j+logback組合
logback庫里自身就已經實現了slf4j的接口,就無需引入多余的適配器了,而且logback也具有更多的優(yōu)點,建議新項目可以使用這個組合。 還有一點需要注意,當引入slf4j后,要注意其實際使用的日志庫是否是由我們引入的,也有可能會使用了我們第三方依賴包所帶入的日志庫,這樣就可能會導致我們的日志失效。
7、日志的聚合分析
日志的聚合可以把位于不同服務器之間的日志統(tǒng)一起來分析處理,如今ELK技術棧亦或者的EFG(fluentd+elasticsearch+grafana)等都是一些比較成熟的開源解決方案。
拿ELK來說,可以在我們的服務器上直接通過logstash來讀取應用打印的日志文件,或者也可以在我們項目中的日志配置文件里配置好相關的socket信息,打印的時候直接把日志信息輸出至logstash。再交由elasticsearch存儲,kibana展示。
以上是正確使用Java日志的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯成都網站設計公司行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享文章:正確使用Java日志的方法-創(chuàng)新互聯
分享地址:http://www.rwnh.cn/article24/csepce.html
成都網站建設公司_創(chuàng)新互聯,為您提供全網營銷推廣、面包屑導航、品牌網站建設、企業(yè)建站、定制網站、網站營銷
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯