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日志框架實現日志回滾