Tomcat8.5.24日志自動清理(maxDays)功能探究


前言

 測試人員反饋tomcat目錄下的日志占用空間很大,需要自動清理。接到這個反饋時,想象着應該是一個很簡單的功能,tomcat應該已經實現了日志的自動清理功能。於是乎,我先到網上查詢了如何自動清除tomcat日志,結果發現搜索結果最靠譜的也就是自己寫個定時清理腳本,放入系統啟動計划中。卧槽,不是吧,這功能還得自己單獨處理!不應該吧!為了解答自己的疑惑,我毅然訪問了tomcat官網,憑借着4級英語的水准,暢游其中,找尋答案。

 果不其然,解決方案被我找到了。那就是設置日志處理handler的maxDays屬性!該方案出現在tomcat-8.5文檔介紹中,接下來就開始探索之旅。

 

一、版本的問題

    1.1、一開始以為Tomcat8.5.×的版本都可以,慶幸自己使用的版本是Tomcat8.5.6。於是打開conf / logging.properties,為handler添加了maxDays屬性。但是一測試發現不行,沒辦法開始查看源碼。

  

   1.2、經查詢org.apache.juli.AsyncFileHandler類存在於tomcat根目錄下的 bin / tomcat-juli.jar 包中,可以通過maven進行jar包下載,分析其源碼。我跳躍試的嘗試了8.5.6, 8.5.15, 8.5.20,這幾個版本都沒有發現handler的maxDays屬性。最終嘗試到8.5.24版本時,發現限制日志保存天數的maxDays屬性。

  

   1.3、當發現8.5.24版本的tomcat-juli jar包可用后,立馬替換到了自己的tomcat中(去掉版本號),重啟服務。發現服務啟動失敗,jar包與當前版本的tomcat不匹配。於是升級tomcat,在官網上下載了tomcat 32-bit/64-bit Windows Service Installer,重新注冊服務后,發現自動清理功能生效。

   1.4、需要注意的是,這個清理功能按照配置只對catalina,localhost,manager,host-manager 這4類日志文件有效。對於stderr,stdout這兩類日志可以通過Tomcat服務管理工具進行設置,過程很簡單,將Logging頁簽下的 Redirect StdoutRedirect Stderror兩項清空后,日志就不再輸出了。

  

    1.5、此外還有localhost_access_log 這一類日志,如果也不需要的話,可以在conf / server.xml 文件中,將Host/Value 下面的日志輸出注釋掉。如下圖。

  

二、日志自動清理(maxDays)實現原理解析

  2.1、AsyncFileHandler為指定的一類日志提供處理方案,繼承自FileHandler類。FileHandler類中聲明有一個maxDays屬性,即文件保留天數。默認值是-1,即不執行任何清理操作。

  

    

  2.2、FileHandler內部啟動了一個過期日志文件清理線程,根據設置的maxDays值進行清理。線程啟動源碼截圖如下,具體線程的實現有興趣的朋友可以自行看看源碼。

       

     

       至此關於tomcat自行清理過期的日志文件功能就簡單介紹完了,如果沒有用過,可以嘗試一下!tomcat版本建議使用8.5.24以上,功能上差強人意,又比自己去寫清理腳本的方案好些。鑒於網上關於這塊功能的文章較少,希望這篇博文能對你有所幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM