Java log4j配置每天生成一个日志文件 - 永恒ぃ☆心 的日志 - 网易博客

来源:百度文库 编辑:神马文学网 时间:2024/04/30 08:56:25

一、配置属性文件log4j.properties

log4j.rootLogger=INFO,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} %5p [%t] (%F\:%L) - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=/home/log/system
log4j.appender.R.DatePattern ='.'yyyy-MM-dd'.log'
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] [%t] (%F\:%L) ->%m %n

二、项目初始化log4j

PropertyConfigurator.configure(log4j);

.......

此步骤略。

三、修改log4j源代码中DailyRollingFileAppender.java文件。

将log4j的源文件加入项目中。修改:

/**
  * Rollover the current file to a new file.
  */
 void rollOver() throws IOException {

  /* Compute filename, but only if datePattern is specified */
  if (datePattern == null) {
   errorHandler.error("Missing DatePattern option in rollOver().");
   return;
  }

  String datedFilename = fileName + sdf.format(now);
  // It is too early to roll over because we are still within the
  // bounds of the current interval. Rollover will occur once the
  // next interval is reached.
  if (scheduledFilename.equals(datedFilename)) {
   return;
  }

  // close current file, and rename it to datedFilename
  this.closeFile();

  File target = new File(scheduledFilename);
  if (target.exists()) {
   target.delete();
  }

  File file = new File(fileName);
  // boolean result = file.renameTo(target);
  boolean result = copy(file, target);
  if (result) {
   LogLog.debug(fileName + " -> " + scheduledFilename);
  } else {
   LogLog.error("Failed to rename [" + fileName + "] to ["
     + scheduledFilename + "].");
  }

  try {
   // This will also close the file. This is OK since multiple
   // close operations are safe.
   this.setFile(fileName, false, this.bufferedIO, this.bufferSize);
  } catch (IOException e) {
   errorHandler.error("setFile(" + fileName + ", false) call failed.");
  }
  scheduledFilename = datedFilename;
 }

修改删除黄色代码,并添加蓝色代码。

并加入方法copy。

boolean copy(File src, File dst) throws IOException {
  try {
   InputStream in = new FileInputStream(src);
   OutputStream out = new FileOutputStream(dst);
   // Transfer bytes from in to out
   byte[] buf = new byte[8192];
   int len;
   while ((len = in.read(buf)) > 0) {
    out.write(buf, 0, len);
   }
   in.close();
   out.close();
   return true;
  } catch (FileNotFoundException e) {
   LogLog.error("源文件不存在,或者目标文件无法被识别.");
   return false;
  } catch (IOException e) {
   LogLog.error("文件读写错误.");
   return false;
  }
 }

原因:

如果不修改DailyRollingFileAppender中的renameTo方法,发报错:Log4j的log4j:ERROR Failed to rename错误。

Java log4j配置每天生成一个日志文件 - 永恒ぃ☆心 的日志 - 网易博客 我心永恒 - 四知布衣的日志 - 网易博客 精美石雕 - 我心永恒的日志 - 网易博客 作为一个女人永恒的精彩 - 博啦的日志 - 网易博客 长征,永恒的记忆! - 颂扬毛泽东的日志 - 网易博客 阴阳永恒 - 夜雨无声的日志 - 网易博客 一个区分生成树指定端口与根端口的方法 - 流萤孤剑的日志 - 网易博客 debian apache2 svn配置 - 灵风的日志 - 网易博客 centos 5.2 配置pptp客户端 - suchalin的日志 - 网易博客 如何查看电脑配置 - 爱拼才会赢的日志 - 网易博客 班德瑞全集[10CD][全正版压缩 320KBPS] - 我心永恒的日志 - 网易博客 log4J日志 一个生僻字 - wangxiuhuan1945的日志 - 网易博客 隐藏文件四大绝招 - 理睬的日志 - 网易博客 如何重建控制文件 - 无法无天耗的日志 - 网易博客 隐藏文件四大绝招 - 理睬的日志 - 网易博客 引用 文件如何加密 - bzh123456的日志 - 网易博客 [博客技巧] 在线生成简单的动画 - 沉默是金的日志 - 网易博客 [博客技巧] 在线生成简单的动画 - 沉默是金的日志 - 网易博客 如何通过配置log4j.xml来打印指定类或指定级别的日志信息 在线颜色代码生成!【博客装饰】 - 無為居士的日志 - 网易博客 每天最准的天气预报 - 翁福陽的日志 - 网易博客 log4j配置相对路径实现日志记录[转] Log4j日志管理系统简单使用说明 - Open Java Project - CSDNB...