1. 程式人生 > >分時間段生成日誌檔案解決Tomcat日誌過大

分時間段生成日誌檔案解決Tomcat日誌過大

    

第1章        引言

1.1        編寫目的

1.2        背景

1.3        方案大綱

第2章        解決方案—依舊用system.out

2.1        設計思路

2.2        程式設計

2.2.1修改startup.bat

2.2.2 建立Java類----LogRedirect類

2.2.3建立JSP----LogRedirect.jsp

2.2.4建立批處理----LogRedirect.bat

2.2.5Windows定時任務

2.3侷限性

第3章        解決方案—採用log4j

3.1設計思路

3.2程式設計

3.2.1 修改專案中的log4j.properties

3.2.2補充

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 引言
    1.  編寫目的

本文件意在說明Tomcat日誌過大的解決方案。

 

    1. 背景

   由於現實生產中,Tomcat服務每天產生日誌檔案中的資料都特別龐大,造成日誌檔案無法開啟,或開啟後經常卡頓,影響到了運維、開發人員的日常工作。

 

    1. 方案大綱

 當前解決方案有兩種:

  1. 依舊用system.out列印日誌,通過修改Tomcat配置檔案以及批處理來分時間段生成日誌檔案。
  2. 用log4j列印日誌,只需修改log4j的配置資訊,從而分時間段生成日誌檔案。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 解決方案—依舊用system.out
    1. 設計思路
  1. 修改Tomcat的startup.bat檔案,使其在伺服器啟動時,會根據當前時間自動生成一個日誌檔案;
  2. 寫java類,功能:根據當前時間生成日誌檔案,並把此java類巢狀入一個jsp中;
  3. 利用批處理執行此jsp;
  4. 利用Windows的定時任務功能,每小時執行一次該批處理檔案;
  5. 因兩個程序不能共用一個資原始檔,故用到了備用檔案(如:伺服器啟動生成09.log,Windows定時任務則生成09append.log)
    1. 程式設計

2.2.1修改startup.bat

將生產中的

改為:

功能:

  1. 若沒有當前日期資料夾,則建立(如:2018-09-10);
  2. 在日期資料夾中,生成當前時間日誌檔案(如:若此時時間為09:22,則生成09.log檔案);
  3. 若重啟伺服器時,已存在時間日誌檔案(如09.log或09append.log),則繼續在該檔案中進行日誌列印。

 

 

 

 

2.2.2 建立Java類----LogRedirect類

功能:

  1. 生成時間日誌檔案,並將日誌資訊列印到裡面;
  2. 若伺服器啟動時生成了時間檔案(如09.log),因為兩個程序不能共用一個資源,故此時生成備用時間檔案(如:09append.log),並將日誌資訊列印到裡面。

2.2.3建立JSP----LogRedirect.jsp

功能:

         呼叫LogRedirect類的redirect方法。

 

 

 

 

2.2.4建立批處理----LogRedirect.bat

功能:呼叫LogRedirect.jsp

2.2.5Windows定時任務

功能:每小時執行LogRedirect.bat,進而生成時間日誌檔案(如08.log  09.log)

2.3侷限性

1.因兩個程序不能共用一個資源,用到了append.log(如09append.log),這樣會多生成一個日誌檔案;

2.需要修改程式碼;

3.需要程式碼和批處理相結合,同時需要Windows定時任務支援,比較複雜。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 解決方案—採用log4j

3.1設計思路

採用log4j記錄Tomcat日誌,只需要修改配置檔案,即可完成分時間段分割日誌檔案。

3.2程式設計

3.2.1 修改專案中的log4j.properties

新增<param name=”DatePattern” value=”yyyyMMdd-HH”/>,如圖所示:

即可實現每小時都生成debug、info和error日誌資訊,如圖所示:

其中:lis_debug.log(記錄debug和info日誌)和lis_error.log(記錄error日誌)相當於一個臨時容器,如現在記錄日誌的時間在18:00-19:00,此時日誌先臨時列印到lis_debug.log和lis_error.log,等到19:00之後,若還有日誌需要列印,則會自動生成lis_debug.log20180912-18檔案和lis_error.log20180912-18檔案,臨時容器中的日誌會全部轉移到其中,隨即清空臨時容器,繼續記錄19:00-20:00的日誌,以此類推。

         注:若容器沒有日誌記錄(如在18:00-19:00之間沒有error日誌產出),則在下一個時間(即19:00之後),不會生成相對應時間段的日誌檔案(即不會生成lis_error.log20180912-18)

 

3.2.2補充

         因為技術有限,無法通過修改log4j.properties實現自動生成日期資料夾(存放當天生成的日誌);

         現存在一思路,利用輔助程式來生成日期資料夾,然後通過IO將當天的日誌拷貝到該資料夾中,但此想法還未實現