Log4j 不支持按日期生成不同的文件夹,通过重写 RollingFileAppender  的 rollOver 、 genFileName 、 subAppend 、 setFile 方法,实现我们的需求(每日生成不同的文件夹,*/20190808/*.log),日志文件格式 info_20190808_01.log .

重写RollingFileAppender 类
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.helpers.CountingQuietWriter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.spi.LoggingEvent;import java.io.File;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.text.SimpleDateFormat;
import java.util.Date;/** 通过重写 RollingFileAppender的rollOver、genFileName、subAppend、setFile 方法,实现我们的需求(每日生成不同的文件夹,* /2017103021/*.log),日志文件格式 pg_20171030_01.log .*/
public class Log4jRollingFileAppender extends RollingFileAppender {
private long nextRollover = 0;private static SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");public void rollOver() {File target;File file;if (qw != null) {long size = ((CountingQuietWriter) qw).getCount();nextRollover = size + maxFileSize;}LogLog.debug("maxBackupIndex=" + maxBackupIndex);boolean renameSucceeded = true;if (maxBackupIndex > 0) {// 删除序号最大(最早的文件)的文件/*file = new File(genFileName(fileName, maxBackupIndex));if (file.exists())renameSucceeded = file.delete();*/// 所有文件名序号加1for (int i = maxBackupIndex - 1; i >= 1 && renameSucceeded; i--) {file = new File(genFileName(fileName, i));if (file.exists()) {target = new File(genFileName(fileName, i + 1));renameSucceeded = file.renameTo(target);}}if (renameSucceeded) {target = new File(genFileName(fileName, 1));this.closeFile();file = new File(fileName);renameSucceeded = file.renameTo(target);if (!renameSucceeded) {try {this.setFile(fileName, true, bufferedIO, bufferSize);} catch (IOException e) {if (e instanceof InterruptedIOException) {Thread.currentThread().interrupt();}LogLog.error("setFile(" + fileName+ ", true) call failed.", e);}}}}if (renameSucceeded) {try {this.setFile(fileName, false, bufferedIO, bufferSize);nextRollover = 0;} catch (IOException e) {if (e instanceof InterruptedIOException) {Thread.currentThread().interrupt();}LogLog.error("setFile(" + fileName + ", false) call failed.", e);}}}private String genFileName(String name, int index) {String val = "_"+df.format(new Date())+"_";String fileName = "";if (index > 0) {String num = index < 10 ? "0" + index : String.valueOf(index);fileName = name.replace(".log", "") + val + num + ".log";} else {fileName = name;}return fileName;}protected void subAppend(LoggingEvent event) {super.subAppend(event);boolean flag = false;String[] _files = fileName.split("/");int len = _files.length;String file_name = _files[len-2];String new_file_name = df.format(new Date());if(!file_name.equals(new_file_name)){flag = true;fileName = fileName.replace(file_name, new_file_name);}if (fileName != null && qw != null) {long size = ((CountingQuietWriter) qw).getCount();if(flag){size = 0L;}if ((size >= maxFileSize && size >= nextRollover) || flag) {rollOver();}}}public void setFile(String file) {// Trim spaces from both ends. The users probably does not want// trailing spaces in file names.String val = file.trim();fileName = val.substring(0, val.lastIndexOf("/"))+"/"+df.format(new Date())+val.substring(val.lastIndexOf("/"), val.length());}
}

log4j.properties 代码块:

#log4j.rootCategory=debug,CONSOLE,D,I,W,E
log4j.rootCategory=debug,CONSOLE,logFile
########################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.encoding=UTF-8
log4j.appender.CONSOLE.layout.ConversionPattern=$PGFAST>[%d{MM-dd HH:mm:ss}][%-5p] %l >>>> <%m>%n
########################################################################
log4j.appender.logFile=com.thinkgem.jeesite.common.log4j.Log4jRollingFileAppender
log4j.appender.logFile.encoding=UTF-8
log4j.appender.logFile.File=${catalina.home}/logs/pg.log
log4j.appender.logFile.MaxFileSize=1KB
log4j.appender.logFile.MaxBackupIndex = 10
log4j.appender.logFile.Append = true
#log4j.appender.logFile.DatePattern='_'yyyyMMdd:HHmm:SSS'.log'
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=$PGFAST>[%d][%-5p] %l >>>> %m%n

效果

Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名相关推荐

  1. 日志 log4j按日期生成文件夹

    期望结果:按日期生成文件夹,在最底层文件夹中记录日志,如:2019/03/11,在11这个文件夹下记录11号的日志,03和2019均为11的父文件夹. API:log4j 主要步骤:继承log4j的o ...

  2. 按日期生成文件夹,并删除之前的文件夹

    //获取unix时间戳的当前时间 $addtime=date("ymd",time()); //创建文件夹 $testdir="./python/out/dada&quo ...

  3. 啊哈哈哈哈 C#按日期生成文件夹,并在文件夹中写入文件

    我的天哪 我终于写出来了 using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...

  4. Excel与bat批量生成文件夹,修改文件夹名称

    用Excel与bat批量生成文件夹,修改文件夹名称 一.批量生成文件夹 excel一列输入文件名序列:另一列用公式生成要写入bat文件的序列,之后复制该列写入.txt文件,保存为.bat文件,双击运行 ...

  5. java创建linux文件_Java生成文件夹

    1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.Java * @Package:com.yo ...

  6. python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构

    大概这样写标题是对的吧... 目标: 通过excel目录结构文档生成文件夹树结构. 也就是: 通过下面的excel 生成下面的文档树结构: 方法: 1.分析:一般文档结构都是事先构思好.可以在txt文 ...

  7. linux文件自动改名,C#如何在生成文件夹或者文件时候自动重命名

    C#如何在生成文件夹或者文件时候自动重命名 如果你在一个文件夹里面, 连续添加文件夹或者文件(不改名字), 那么系统会自动加上(1),(2),(3)... 这个效果我在网上搜不到, 自己写一下也不太难 ...

  8. python生成文件夹以及压缩文件夹

    ''' @Description 生成文件夹 @params (path) 文件夹路径 @params (title) 文件名称 @params (content) html 文件代码 @params ...

  9. 根据图片名字生成文件夹并归类+批量重命名照片名

    最近在处理手头的部分图片数据,所以码了点code,也许质量不高,供大家参考, 欢迎各路大神纠正问题!! 1.该代码根据照片的名字来生成文件夹,并且将同类照片放置同一文件夹creat_dir.py #- ...

最新文章

  1. 精度首超ResNet,港科大和CMU提出史上最强二值化网络ReActNet
  2. 自考计算机科学与技术本科毕业论文选题,自考计算机科学与技术专业(本)毕业论文写作指导...
  3. 史迪仔的原型_星际宝贝三个版本对比,莉罗抛弃史迪仔,童年真的回不去了
  4. struts2权威指南学习笔记:struts2引入自定义库
  5. Javascript第三章数组Array常用方法第三课
  6. 安装SQL2000时弹出“以前的某个程序安装已在安装计算机上创建挂起的文件操作、、、”...
  7. ext数据库读取动态添加window组件
  8. Qt5.12 安装教程windows
  9. 石油化工行业SCM供应链管理系统开发,优化供应链平台运营模式
  10. java find 方法,findOne方法是findOne(Example
  11. 华硕飞行堡垒扬声器没声音_华硕玩游戏没声音_华硕飞行堡垒玩游戏卡
  12. 大数据的“多维度”与“时效性”
  13. 动态内存的申请和非动态内存的申请_公安交管新举措咋解读?非营运七座车6年免检,70岁可申请驾照...
  14. 阿里云的免费云虚拟主机
  15. Nexus搭建私服(记录)
  16. 思科、华为、瞻博juniper、中兴、阿尔卡特中高端网络设备查看端口收发光功率-命令汇总
  17. Php设计模式之【适配器模式 Adapter Pattern】
  18. php 的几种运行方式
  19. java闪光灯_手电筒项目开发一闪光灯
  20. 【论文翻译】-- GaitSet: Regarding Gait as a Set for Cross-View Gait Recognition

热门文章

  1. Go语言占位符的使用
  2. 什么是海鸥脚网络变压器?普思海鸥脚H1102NL百兆网络变压器
  3. 【Python】爬取百度图片和必应图片
  4. C1认证学习笔记(第四章)
  5. Oracle 4月安全通告
  6. iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码...
  7. C语言对时间单位的换算
  8. 如何检验计算机主板的好坏,怎么判断笔记本主板、CPU硬件好坏? 查看电脑配置的教程...
  9. 趣学PYTHON 第一章python不是大蟒蛇
  10. 双显卡只用独显好吗_显卡有什么作用 独显和双显卡笔记本哪个好【详解】