日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】log4j 设置将生成的日志进行gz压缩并删除过期日志

發布時間:2024/10/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】log4j 设置将生成的日志进行gz压缩并删除过期日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自https://www.cnblogs.com/haw2106/p/10116164.html

1、準備jar ?:log4j-1.2.17.jar,commons-logging-1.2.jar,這2個就可以了,其他關于日志的jar包就不要加進來了,在優先級上會有沖突。

2、定義一個類,繼承RollingFileAppender類,這個類是按照日志大小滾動生成日志,并把日志編號。我就在這個類基礎上重新寫了其中的一些方法,加上日期和刪除功能,稍加改動就行了。

package com.hm.sage.bigdata.spark.log;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.zip.GZIPOutputStream;import org.apache.log4j.RollingFileAppender; import org.apache.log4j.helpers.CountingQuietWriter; import org.apache.log4j.helpers.LogLog;public class RoolingAndDateFileAppender extends RollingFileAppender {private String datePattern;//日期格式private String dateStr = "";//文件后面的日期private String expirDays = "1";//保留最近幾天private String isCleanLog = "true";//是否清日志private String maxIndex = "100";//一天最多幾個文件private File rootDir;//父目錄的抽象路徑名private String gzFormat = "gz";//壓縮格式/*** 設置日期格式** @param datePattern*/public void setDatePattern(String datePattern) {if (null != datePattern && !"".equals(datePattern)) {this.datePattern = datePattern;}}/*** 獲取日期格式** @return*/public String getDatePattern() {return this.datePattern;}public void rollOver() {//文件后面的日期dateStr = new SimpleDateFormat(this.datePattern).format(new Date(System.currentTimeMillis()));File target = null;File file = null;if (qw != null) {//得到寫入的字節數long size = ((CountingQuietWriter) this.qw).getCount();LogLog.debug("rolling over count=" + size);}//默認情況下有一個備份文件LogLog.debug("maxBackupIndex=" + this.maxBackupIndex);//如果maxIndex<=0則不需命名if (maxIndex != null && Integer.parseInt(maxIndex) > 0) {//logRecoed.log.2018-08-24.5//刪除舊文件file = new File(this.fileName + '.' + dateStr + '.' + Integer.parseInt(this.maxIndex) + '.' + gzFormat);if (file.exists()) {//測試用這個抽象路徑名表示的文件或目錄是否存在。//如果當天日志達到最大設置數量,則刪除當天第一個日志,其他日志為尾號減一Boolean boo = reLogNum();if (!boo) {LogLog.debug("日志滾動重命名失敗!");}}}//獲取當天日期文件個數int count = cleanLog();//生成新文件//target=new File(fileName+"."+dateStr+"."+(count+1));this.closeFile();//關閉先前打開的文件。file = new File(fileName);//creat zip output stream to build zip fileGZIPOutputStream gzout = null;FileInputStream fin = null;byte[] buf = new byte[1024];//file -> gztry {fin = new FileInputStream(file);gzout = new GZIPOutputStream(new FileOutputStream(fileName + "." + dateStr + "." + (count + 1) + '.' + gzFormat));int num;while ((num = fin.read(buf, 0, buf.length)) != -1) {gzout.write(buf, 0, num);}gzout.flush();gzout.finish();LogLog.debug(fileName + " -> " + fileName + "." + dateStr + "." + (count + 1) + '.' + gzFormat + " successful!");} catch (IOException e) {LogLog.error("add gz file(" + fileName + "." + dateStr + "." + (count + 1) + '.' + gzFormat + ") failed.");} finally {try {if (gzout != null) {gzout.close();}if (fin != null)fin.close();} catch (IOException e) {LogLog.error("close Stream failed");}}//delete old filefile.delete();//LogLog.debug("Renaming file"+file+"to"+target);//file.renameTo(target);//重命名file文件try {setFile(this.fileName, false, this.bufferedIO, this.bufferSize);} catch (IOException e) {LogLog.error("setFile(" + this.fileName + ",false)call failed.", e);}}/*** 獲取當天日期文件個數** @return*/public int cleanLog() {int count = 0;//記錄當天文件個數if (Boolean.parseBoolean(isCleanLog)) {File f = new File(fileName);//返回這個抽象路徑名的父目錄的抽象路徑名rootDir = f.getParentFile();//目錄中所有文件。File[] listFiles = rootDir.listFiles();for (File file : listFiles) {if (file.getName().contains(dateStr)) {count = count + 1;//是當天日志,則+1} else {//不是當天日志需要判斷是否到期刪除if (Boolean.parseBoolean(isCleanLog)) {//清除過期日志String[] split = file.getName().split("\\\\")[0].split("\\.");//校驗日志名字,并取出日期,判斷過期時間if (split.length == 4 && isExpTime(split[2])) {file.delete();}}}}}return count;}/*** 判斷過期時間** @param time* @return*/public Boolean isExpTime(String time) {SimpleDateFormat format = new SimpleDateFormat(this.datePattern);try {Date logTime = format.parse(time);Date nowTime = format.parse(format.format(new Date()));//算出日志與當前日期相差幾天int days = (int) (nowTime.getTime() - logTime.getTime()) / (1000 * 3600 * 24);if (Math.abs(days) >= Integer.parseInt(expirDays)) {return true;} else {return false;}} catch (Exception e) {LogLog.error(e.toString());return false;}}/*** 如果當天日志達到最大設置數量,則每次刪除尾號為1的日志,* 其他日志編號依次減去1,重命名** @return*/public Boolean reLogNum() {boolean renameTo = false;File startFile = new File(this.fileName + '.' + dateStr + '.' + "1" + '.' + gzFormat);if (startFile.exists() && startFile.delete()) {//是否存并刪除for (int i = 2; i <= Integer.parseInt(maxIndex); i++) {File target = new File(this.fileName + '.' + dateStr + '.' + (i - 1) + '.' + gzFormat);this.closeFile();File file = new File(this.fileName + '.' + dateStr + '.' + i + '.' + gzFormat);renameTo = file.renameTo(target);//重命名file文件}}return renameTo;}public String getDateStr() {return dateStr;}public void setDateStr(String dateStr) {this.dateStr = dateStr;}public String getExpirDays() {return expirDays;}public void setExpirDays(String expirDays) {this.expirDays = expirDays;}public String getIsCleanLog() {return isCleanLog;}public void setIsCleanLog(String isCleanLog) {this.isCleanLog = isCleanLog;}public String getMaxIndex() {return maxIndex;}public void setMaxIndex(String maxIndex) {this.maxIndex = maxIndex;}}

log4j.properties 配置文件

log4j.rootLogger=ALL,R,CONSOLElog4j.appender.R=com.hm.sage.bigdata.spark.log.RoolingAndDateFileAppender log4j.appender.R.Encoding=UTF-8 log4j.appender.R.file=/Users/shengwen/tmp/logs/logRecoed.log log4j.appender.R.Append=true log4j.appender.R.DatePattern=yyyy-MM-dd log4j.appender.R.MaxFileSize=5MB log4j.appender.R.maxIndex=10 log4j.appender.R.expirDays=4 log4j.appender.R.isCleanLog=truelog4j.appender.R.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n log4j.appender.R.layout=org.apache.log4j.PatternLayout#console log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%n log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

?

總結

以上是生活随笔為你收集整理的【转】log4j 设置将生成的日志进行gz压缩并删除过期日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 乌克兰黄色片 | 欧美日韩中日 | 欧美在线xxx| 少妇大叫太粗太大爽一区二区 | 国产一区二区小说 | 亚洲射射 | 极品人妻一区二区三区 | 欧美风情第一页 | 久久国产乱子伦精品 | 青娱乐最新视频 | 亚洲制服无码 | 在线视频国产一区 | 波多野结衣一本一道 | 啪啪网视频| 国产区一区二区三区 | 伊甸园精品区 | 国产三级三级在线观看 | 韩国无码一区二区三区精品 | 日韩伦理一区二区 | 无码少妇一区二区三区芒果 | 色窝av| 天堂免费在线视频 | 性爱动漫 | 国产精品入口夜色视频大尺度 | 老汉色老汉首页av亚洲 | 国产夫绿帽单男3p精品视频 | 五月天婷婷激情网 | 成人免费在线 | 日韩一卡二卡在线 | 88久久精品无码一区二区毛片 | 久久这里只有精品9 | 国产日韩欧美久久 | 激情小说专区 | 欧美不在线 | www.99re7.com| 中文av网站 | 亚洲精品成人无码 | 原创av| 国产又爽又黄无码无遮挡在线观看 | 日韩视频一区二区三区四区 | 性生交大片免费看 | 在线免费观看亚洲视频 | 国产亚洲欧美日韩精品 | 精品国内自产拍在线观看视频 | 色呦网站 | 日韩在线1| 好了av在线| 日韩欧美中文一区 | 国产又粗又猛又黄又爽无遮挡 | 亚洲一区二区三区欧美 | 久久久免费精品 | av天天色 | 91传媒在线视频 | 国产精品成人一区二区网站软件 | 精品国产一区二区视频 | 久久久久久午夜 | 亚洲乱码av | 无码人妻丰满熟妇区96 | 又白又嫩毛又多15p 超碰在线一区 | av天堂永久资源网 | 97视频在线播放 | 九九视频免费观看 | 国产成人在线电影 | jul023被夫上司连续侵犯 | 成人性视频在线 | 综合五月婷婷 | 日日草草| 国内精品国产三级国产aⅴ久 | 国产经典三级在线 | 伊人久久久久久久久久久 | 男女黄色录像 | 老头糟蹋新婚少妇系列小说 | 五月婷婷六月丁香综合 | 少妇人妻好深好紧精品无码 | 日韩一区欧美二区 | 国产对白自拍 | 色香色香欲天天天影视综合网 | 亚洲欧美一区二区激情 | 中文字幕免费高清在线观看 | 日韩 国产 欧美 | 性色一区二区三区 | 在线观看三级网站 | 一区二区在线免费视频 | 一级黄色片在线播放 | 国产女人18水真多18精品一级做 | 美女露出让男生揉的视频 | 久久久久久免费精品 | 亚洲欧美综合网 | 天天色影 | www.xxx国产| 亚洲国产毛片aaaaa无费看 | 精品视频在线观看一区 | 黄色片a级 | 欧美国产在线看 | 九色视频网 | 6080午夜伦理| 精品一区二区三区无码视频 | 国产美女主播在线 | 成人男女视频 |