Tomcat 日誌清除(含擴展AccessLogValve)

来源:http://www.cnblogs.com/yaohuimo/archive/2016/12/19/6196139.html
-Advertisement-
Play Games

1、tomcat的訪問日誌AccessLogs定期或者定量刪除 a 開啟tomcat訪問日誌 編輯${catalina}/conf/server.xml文件.註:${catalina}是tomcat的安裝目錄 把以下的註釋(<!-- -->)去掉即可。 <!--<ValveclassName="or ...


1、tomcat的訪問日誌AccessLogs定期或者定量刪除

a 開啟tomcat訪問日誌

編輯${catalina}/conf/server.xml文件.註:${catalina}是tomcat的安裝目錄

    把以下的註釋(<!-- -->)去掉即可。

            <!--<ValveclassName="org.apache.catalina.valves.AccessLogValve"

                directory="logs"  prefix="localhost_access_log."suffix=".txt"

                pattern="common" resolveHosts="false"/>-->

下圖為配置文件開啟訪問日誌,以及對應參數的解釋:

 

b extend the AccessLogValve by override this function: log(),設置定期或定量刪除訪問日誌

public void emptyFile() {
        String logPath = System.getProperty("catalina.base");
        // rotatable=false,定量清除只有一個日誌文件localhost_access_log.log
        if (this.rotatable == false) {
            synchronized (this) {
                System.out.println("------log size is------:" + this.currentLogFile.length());
                if (this.currentLogFile.length() > 10 * 1024) {
                    this.currentLogFile.delete();
                    open();
                }
            }
        } else {
            // 含有日期的日誌清除方式`
            // localhost_access_log.2016-12-16.23.37.log
            // localhost_access_log.2016-12-16.23.39.log
            if (new File(logPath).isDirectory()) {
                // 獲取文件夾中的文件集合
                File[] logs = new File(logPath).listFiles();
                // 設置系統這裡設置的日期格式,和配置文件里的參數保持一致
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd.HH.mm");
                // 遍歷集合
                for (int i = 0; i < logs.length; i++) {
                    File log = logs[i];
                    // 獲取到第i個日誌的名稱,截取中間的日期欄位,轉成long型s
                    int start = log.getName().indexOf(".") + 1;
                    int end = log.getName().lastIndexOf(".");
                    // 獲取到的日誌名稱中的時間(2016-12-16.23.37)
                    String dateStr = logPath.substring(start, end);
                    // 將字元串型的(2016-12-16.23.37)轉換成long型
                    long lonInt = 0;
                    try {
                        lonInt = dateFormat.parse(dateStr).getTime();
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("------old-log date is------:" + lonInt);
                    // 系統時間減去日誌名字中獲取的時間差大於配置文件中設置的時間刪除
                    if ((System.currentTimeMillis() - lonInt) / (1000 * 60) > 10) {
                        log.delete();
                        open();
                    }
                }
            }
        }

    }

 

2、tomcat的普通日誌(catlina.out、localhost)配置log4j日誌框架實現日誌回滾

Log4j配置tomcat日誌,定期刪除:

首先,需要下載3個jar包.

tomcat-juli.jar 和 tomcat-juli-adapters.jar、log4j.jar

http://www.apache.org/dist/logging/log4j/1.2.17/

http://www.apache.org/dist/tomcat/tomcat-7/v7.0.69/bin/extras/

 

3個jar包一次放入的目錄為:

tomcat-juli-adapters.jar 和 log4j.jar放入 ($CATALINA_BASE/lib)目錄下

tomcat-juli.jar放入 $CATALINA_BASE/bin/目錄,直接覆蓋原有的tomcat-juli.jar即可

 

刪除$CATALINA_BASE/conf/logging.properties文件,防止java.util.logging生成零長度的日誌文件。

 

修改Tomcat中的conf/context.xml文件,將<Context>為<Context swallowOutput="true">。

 

最後,在tomcat6.0.43/lib目錄下創建一個log4j.properties, 加入如下內容並保存:

(這裡以定期清理catalina.out為例)

******************************************************************************

log4j.rootLogger = INFO, CATALINA

 

# Define all the appenders

log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender

log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina

log4j.appender.CATALINA.Append = true

log4j.appender.CATALINA.Encoding = UTF-8

# Roll-over the log once per day

log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'

log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout

log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

 

log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender

log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost

log4j.appender.LOCALHOST.Append = true

log4j.appender.LOCALHOST.Encoding = UTF-8

log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'

log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout

log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

 

log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender

log4j.appender.MANAGER.File = ${catalina.base}/logs/manager

log4j.appender.MANAGER.Append = true

log4j.appender.MANAGER.Encoding = UTF-8

log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'

log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout

log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

 

log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender

log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager

log4j.appender.HOST-MANAGER.Append = true

log4j.appender.HOST-MANAGER.Encoding = UTF-8

log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'

log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout

log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

 

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Encoding = UTF-8

log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

 

# Configure which loggers log to which appenders

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\

INFO, MANAGER

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\

INFO, HOST-MANAGER

 

重啟tomcat,就可以看到java -Djava.util.logging.config.file變成了java -Dnop -Djava.util.logging.config.file,說明配置成功了

 

效果如下所示:

 

 

參考:

http://alvinalexander.com/java/jwarehouse/apache-tomcat-6.0.16/java/org/apache/catalina/valves/AccessLogValve.java.shtml

http://code.taobao.org/p/tomcat/diff/3/tc8.0.x/java/org/apache/catalina/valves/AccessLogValve.java

http://www.tuicool.com/articles/ymyiuiu

http://sanwen8.cn/p/520j7Qi.html

http://www.cnblogs.com/dimmacro/p/5566480.html

http://blog.csdn.net/jackljf/article/details/17428335

Shell 分析tomcat訪問日誌 格式

http://www.cnblogs.com/zhwj184/archive/2013/03/28/3027422.html

java類寫入日誌和定時刪除日誌

http://blog.csdn.net/high2011/article/details/50451216

http://blog.csdn.net/jsky_studio/article/details/41686597?spm=5176.8246799.blogcont.4.WnVUiV>


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C#使用Jquery zTree實現樹狀結構顯示_非同步數據載入 ...
  • BookMark 我們在平時的工作流使用中,並不是直接這樣一氣呵成將整個工作流直接走完的,通常一個流程到了某一個節點,該流程節點的操作人,可能並不會馬上去處理該流程,而只有當處理人處理了該流程,流程才會繼續往下走。對於不同流程節點的處理人,他所能處理的是不同的流程節點。 就好像我們看書,我們需要書簽 ...
  • 本文章主要是記錄一下我每天的代碼,日後方便回想,和給那些初學者的一些模板。 今天寫一下圖片上傳,因為我主要學習的是MVC那就以MVC為後臺編寫吧。 1.首先要準備的東西是 (1)一個比較好用的上傳插件這個插件。 (2)插件包含的js,和css代碼。如需要插件請留言郵箱。 (3)開始編寫代碼。修改提交 ...
  • 在使用winform程式獲取調用cmd命令提示符時,如果是win7以上的操作系統,會需要必須以管理員身份運行才會執行成功,否則無效果或提示錯誤。 比如在通過winform程式執行cmd命令時,某些情況下如果不是以管理員身份運行,則會提示命令無效。 或者通過winform程式執行Windows Ser ...
  • 狀態機工作流 在上一節Workflow筆記1——工作流介紹中,介紹的是流程圖工作流,後來微軟又推出了狀態機工作流,它比流程圖功能更加強大。 新建項目StatueWorkflowConsoleApp 自動添加了一個起始節點和一個狀態節點. 運行結果如下: 註意執行順序。接下來,擴展此工作流。 1、設置 ...
  • Generics ___ The term "generic" means "pertaining or appropriate to large groups of classes." While using someone else’s generic type is fairly easy, ...
  • 前面介紹了Solr在項目中的使用和構建高度可用、高度可擴展的Solr伺服器的一些想法。但是光說不練假把式,現在開始,把Solr運行起來繼續深入瞭解吧! 安裝 安裝JAVA Apache Solr 6.3需要JRE1.8或以上版本的支持,而且Linux和Windows平臺都支持。關於下載和配置就不再多 ...
  • 今日問題: 請問主程式輸出結果是什麼?(點擊以下“【Java每日一題】20161219”查看20161216問題解析) 題目原發佈於公眾號、簡書:【Java每日一題】20161219,【Java每日一題】20161219 註:weknow團隊近期開通並認證了分答,歡迎大家收聽,有問題也歡迎到分答來咨 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...