log4j按日期和文件大小生成日志文件

 最近在做日志输出保存,按日期和文件大小生成日志文件,比如说生成的日志文件路径为.../20190820/log.log,log1.log,log2.log。其20190820下的log文件大小相同由于框架比较老,ssh,导致测试的时候能生成日志文件,但是内容为空,最后发现是log4j的jar包冲突的原因,特别注意一下
  1. log4j.properties配置
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
#log4j.appender.Console.Target=System.out
log4j.appender.Console.Threshold=INFO
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#文件大小到达指定尺寸的时候产生一个新的文件
#log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File=net.northking.util.rizhi.MyRollingFileAppender
log4j.appender.File.encoding=UTF-8
#指定输出目录
log4j.appender.File.File=logs/uip.log
#定义文件最大大小
log4j.appender.File.MaxFileSize=20MB
#定义最大可生成文件个数
log4j.appender.File.MaxBackupIndex=20
log4j.appender.File.Append=true
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
  1. web.xml配置
<context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.properties</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>
  1. 自定义类继承RollingFileAppender,生成我们想要的格式
package net.northking.util.rizhi;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,* 按日期生成文件夹,日志放在日期文件夹下*/
public class MyRollingFileAppender 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) {// 所有文件名序号加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 < maxBackupIndex ? "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) {String val = file.trim();fileName = val.substring(0, val.lastIndexOf("/"))+"/"+df.format(new Date())+val.substring(val.lastIndexOf("/"), val.length());}
}

log4j按日期和文件大小生成日志文件相关推荐

  1. java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...

    一.效果图: 二.代码 (一)Bootstrap.yml配置文件 logging: config: classpath:logback-spring.xml (二)新增logback-spring.x ...

  2. log4j支持同时按日期和文件大小分割日志

    1.需要的jar包 <!-- LOG4J --> <dependency><groupId>org.slf4j</groupId><artifac ...

  3. 【Java编程系列】log4j配置日志按级别分别生成日志文件

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  4. SpringBoot生成日志文件---logback和log4j

    SpringBoot生成日志文件---logback和log4j 一.logback logback是SpringBoot自带的日志文件,默认会为控制台输出INFO级别的日志,并且不会将日志文件保存. ...

  5. Log4j每天、每小时、每分钟定时生成日志文件

    转自:http://blog.csdn.net/vtopqx/article/details/8432862 在做项目中基本上都用到了日志log,那么自然就会遇到问题,比方说,日志太大了怎么办?日志很 ...

  6. java 写日志太快_Log4j2 快速入门 —— 定期/定大小生成日志文件(三)

    Log4j2 对于生成日志文件时,可以通过对中的进行设置,来完整日志文件各种生成方案 定期生成日志文件 log4j2.xml user/logs filePattern="${LOG_HOM ...

  7. logback无法生成日志文件之谜

    前言 spring一般需要打印日志,不然无法定位问题,也会增加调试难度,而目前和spring搭配的比较火的日志库是logback 使用方法很简单,直接在该位置加入一个xml的配置文件即可(配置文件示例 ...

  8. log4j每天,每小时产生一日志文件

    log4j每天,每小时产生一日志文件 2016年08月05日 14:14:33 阅读数:6254 一.之前的文章中有log4j的相关配置以及属性的介绍,下面我们先把配置列出来: log4j.rootL ...

  9. NGINX按天生成日志文件的简易配置

    NGINX按天生成日志文件的简易配置 0x01 最近后端童鞋遇到一个小需求,拆分nginx生成的log文件,最好是按天生成,看着她还有很多bug待改的状态,我说这个简单啊,我来吧.曾经搞node后端的 ...

最新文章

  1. jQuery插件之ajaxFileUpload
  2. 删除指定目录下的所有文件包括目录
  3. 【中级软考】面向对象分析包含哪几个活动?
  4. 8月19学习练习[两三个TableView并排显示]
  5. php 打包下载网络图片,PHP实现图片批量打包下载功能
  6. myeclipse进入Myeclipse configuration center 如何关闭
  7. Java Map遍历方式的选择
  8. 代码创建listview android,android ListView 示例4 使用 SimpleAdapter 创建 ListView
  9. apulSoft apShaper for Mac(滤波失真插件)
  10. 提高生产力,这4款设计软件能自动生成代码
  11. hitool java_Hitool打开出现failed to create the java virtual machine
  12. c++语言计算2的n次方,2的N次方
  13. linux转换flv文件格式,在linux 如何播放FLV 和 WMV 格式的文件?
  14. 使用邻接矩阵实现商品SKU表单联动
  15. 对draw.io第一次加载慢的探讨
  16. Gem5 O3 可视化
  17. web页面设计实训——03.12
  18. 侍魂胧月传说服务器维护中,侍魂胧月传说手游4月8日停机维护更新公告
  19. JAVA面试题|JAVA锁相关面试题总结(一)
  20. 网络协议之:基于UDP的高速数据传输协议UDT

热门文章

  1. 010 Editor修改指令
  2. Flink报错:org.apache.flink.util.FlinkRuntimeException: Exceeded checkpoint tolerable failure threshold
  3. java 去掉空行_java 去掉空行
  4. 无线充电动牙刷芯片方案功能和原理介绍
  5. 从前慢-SpringCloud
  6. 微信小程序--红色星球
  7. 计算机网络和HTTP协议:HTTP篇
  8. 使用IntelliJ IDEA打开一个项目步骤
  9. Luogu P4231 三步必杀 (差分)
  10. apple登录服务端验证