- 浏览: 352389 次
- 性别:
- 来自: 成都正在项目
文章分类
- 全部博客 (121)
- Java-Spring (1)
- Java-Hibernate (5)
- Java-基础 (16)
- Java-中级 (1)
- Java-高级 (18)
- Java-Struts (0)
- Java-RCP/Swing/SWT/JFACE (1)
- Java-常用正则 (1)
- Java-反射 (2)
- Java-h2database (2)
- JAVA面试题目 (1)
- ArcGIS Desktop 10——安装篇 (2)
- ArcGIS Desktop 10——基本知识 (0)
- ArcGIS Desktop 10——专业库——数据管理 (9)
- PHP——安装篇 (3)
- PHP——基础篇 (2)
- PHP——教程笔记 (10)
- GIS——基础 (3)
- GIS——算法 (0)
- GIS——Geoserver (1)
- GIS——OpenLayers (1)
- C#——既然改成了ITEYE我就增加个栏目 (1)
- Oracle——PL/SQL (1)
- Oracle——Java基础 (2)
- Oracle——TOAD (1)
- ECLIPSE-MYECLIPSE常见问题 (3)
- MySQL——安装篇 (4)
- Postgres (5)
- JavaScript - JQUERY (2)
- C++ (2)
- 操作系统 (5)
- Dwr——DirectWebRemoting (5)
- Maven (1)
- FLEX (4)
- ruby (1)
最新评论
-
AXthrough:
好强大,支持。
解决Jquery.autocomplete.js多参数的正确传递+中文编码+发送兼容FF+空格问题+返回值 -
redsky008:
独立的程序,独立的路径。
我已经转行了,以后这个很少关注的了 ...
真正解决 log4j:ERROR Failed to rename错误解决办法 -
梅花簪:
没明白,怎么改配置,为不同的进程所有?
真正解决 log4j:ERROR Failed to rename错误解决办法
真正解决 log4j:ERROR Failed to rename错误解决办法
- 博客分类:
- Java-基础
今天终于遇到了log4j配置成DailyRollingFileAppender后,没有正确生成文件,或者没有重命名log文件
在网上寻找了一遍,绝大部分都是复制了了就不管了,大致原文该链接http://www.blogjava.net/DreamAngel/archive/2011/11/10/363400.html中的代码有明显问题,比如日志文件过大怎么办,然而复制了原log文件后,那原来的log文件需要清空却没有做。
现修正如下,但修正的结果却是错误的(你可以不看修正的结果了):
真正占用文件的根源可以从这里说起,windows平台下你打开一个记事本,你是可以删除的该记事本的,但是如果用独占的方式打开一个记事本,因为加了锁,而另一个进程(对头这里是进程,而非线程)却要去重命名它,怎么可能做到呢,所以最好是两个独立的进程就做独立进程的事情了,具体解决思路当然是进程既然是独立的,log4j.properties中一定要修改日志记录的路径为不同的进程所独有。
在网上寻找了一遍,绝大部分都是复制了了就不管了,大致原文该链接http://www.blogjava.net/DreamAngel/archive/2011/11/10/363400.html中的代码有明显问题,比如日志文件过大怎么办,然而复制了原log文件后,那原来的log文件需要清空却没有做。
现修正如下,但修正的结果却是错误的(你可以不看修正的结果了):
真正占用文件的根源可以从这里说起,windows平台下你打开一个记事本,你是可以删除的该记事本的,但是如果用独占的方式打开一个记事本,因为加了锁,而另一个进程(对头这里是进程,而非线程)却要去重命名它,怎么可能做到呢,所以最好是两个独立的进程就做独立进程的事情了,具体解决思路当然是进程既然是独立的,log4j.properties中一定要修改日志记录的路径为不同的进程所独有。
/** * 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 = copy(file, target); if (result) { FileWriter fw = new FileWriter(file); fw.write(""); fw.flush(); fw.close(); 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, true, this.bufferedIO, this.bufferSize); } catch (IOException e) { errorHandler.error("setFile(" + fileName + ", true) call failed."); } scheduledFilename = datedFilename; } // 最大的流为60MB,当文件的容量大于60MB的时候便分开流 final int MAX_BYTE = 60000000; /** * Copies src file to dst file. If the dst file does not exist, it is * created.8KB cache * * @param src * @param dst * @throws IOException */ boolean copy(File src, File dst) throws IOException { try { long streamTotal = 0; // 接受流的容量 int streamNum = 0; // 流需要分开的数量 int leave = 0; // 文件剩下的字符数 byte[] inOutb;// byte数组接受文件的数据 FileInputStream in = new FileInputStream(src); FileOutputStream out = new FileOutputStream(dst); // 通过available方法取得流的最大字符数 streamTotal = in.available(); // 取得流文件需要分开的数量 streamNum = (int)Math.floor(streamTotal/MAX_BYTE); // 分开文件之后,剩余的数量 leave = (int)(streamTotal % MAX_BYTE); // 文件的容量大于60MB时进入循环 if(streamNum>0){ for (int i = 0; i < streamNum; i++) { inOutb = new byte[MAX_BYTE]; // 读入流,保存在byte数组 in.read(inOutb, 0, MAX_BYTE); out.write(inOutb); out.flush(); } } // 剩余的流数据 inOutb = new byte[leave]; in.read(inOutb, 0, leave); out.write(inOutb); out.flush(); in.close(); out.close(); return true; } catch (FileNotFoundException e) { LogLog.error("源文件不存在,或者目标文件无法被识别."); return false; } catch (IOException e) { LogLog.error("文件读写错误."); return false; } }
发表评论
-
非常好的JAVA现有资源网络
2013-02-18 18:09 779http://www.java2v.com/CN/Code/J ... -
java FtpClient 删除目录用removeDirectory方法
2013-01-09 16:27 3033如标题,删除方法 -
servlet中的请求参数,对于调试servlet很有用
2013-01-09 15:53 823每次调试都很烦,没有必要用每次都用调试模式,直接打出来一切OK ... -
字符问题,长度跟实际长度不一致,求教?
2012-11-05 18:11 922public static void main(String ... -
转载:JDK1.5/1.6/1.7的新特性:JDK1.5的新特性
2012-10-12 21:35 0本来想自己整理一下的,结果有网友已经简单整理了下,为了便于本人 ... -
System.in乱码以及控制台其他乱码真正解决办法
2011-08-17 16:47 4050System.in乱码解决 原来是java源文件编码本身为U ... -
如何识别ISO-8859-1
2011-08-10 22:32 1176由于网上流传的Encoding.java, Encode.ja ... -
编译时,找不到符号
2011-08-04 14:03 2183构建Maven应用时,进行测试,发现报错, “找不到符号” ... -
收藏一篇常用Java开源项目
2011-07-26 11:32 729http://unsoundboy.iteye.com/blo ... -
简单格式化4字节的16进制字符串为32长度的字符串,不足补0
2011-07-22 15:12 5197/** * 16进制转格式化的二进制字符串,并格式化为 ... -
转 Java事件与本地时间相差8小时解决
2011-07-21 14:24 2049问题: 1.new Date() 得到的时间 和系统相差 相 ... -
TEST11
2011-06-29 17:42 2=AAAAAwYQBAAEwBAQAAEAAAAAYQBLBF ... -
TEST10
2011-06-29 17:42 2dHkSAAACAAAFAQhABsEUs1GeuQnblJn ... -
TEST9
2011-06-29 17:41 1CmdSKF9Q9qe+YxSNM9GaTRIWqmEYOr5 ... -
TEST8
2011-06-29 17:41 1sjABWYgRp3tMEgOz+Nw2JpPPE31aQUz ... -
TEST7
2011-06-29 17:40 1RiIfj+d5gya1fBHb6kk+v1sXwAASDFi ... -
TEST6
2011-06-29 17:40 2W/bFOrmva2z3cBJeoUBbF0cIkWPp/UQ ... -
TEST5
2011-06-29 17:39 1HpCjZK4VlDIRAMeegN+NwFtfmjGYzT+ ... -
TEST4
2011-06-29 17:39 2zsw+ccLzwxVrUqMtkJxyo2ky24N5fFt ... -
TEST3
2011-06-29 17:39 2ztfKfvf0d/tI66z2gl0xozzXzZ+8kiA ...
相关推荐
log4j:ERROR Failed to rename
log4j:ERROR Failed to rename错误解决办法,修改源码里的DailyRollingFileAppender类,用此jar包就不会再出现ERROR Failed to rename的错误了
log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以当log4j对日志文件进行rename时,就发生了Failed to rename错误 。要修改log4j的源码,附件是我修改好后的,方便大家...
解决log4j:ERROR Failed to rename, win系统占用文件无法改名字的问题
log4j:ERROR Failed to rename错误解决办法 http://www.blogjava.net/DreamAngel/archive/2011/11/10/363400.html
包括修改后的[color=darkred]org.apache.log4j.DailyRollingFileAppender[/color]类的源代码和已编译好的文件. 请用DailyRollingFileAppender.class替换log4j-1.2.15.jar包里相应的类. 博文链接:...
log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以当log4j对日志文件进行rename时,就发生了Failed to rename错误 。要修改log4j的源码,附件是我修改好后的,方便大家...
针对log4j:ERROR Failed to rename的问题,修改源代码中的DailyRollingFileAppender.java文件,将rename改为copy。 该log4j-1.2.15.jar,就是修改后的jar包。 已经过测试,可以正常生成日志文件。
LogLog.error("Failed to rename[" + oldName + "] to [" + newName + "]."); } } ``` 在上面的代码中,我们首先创建了两个 File 对象,分别代表旧的文件夹和新的文件夹。然后,我们使用 renameTo 方法将旧的...
此外,当遇到启动失败的情况时,查阅错误日志(如 `/var/log/mysql/error.log`)是非常重要的,这可以帮助我们定位问题并找到解决方案。 总之,正确迁移MySQL的数据目录不仅涉及配置文件的修改,还涉及到系统安全层...
o CurrPorts now displays a simple error message if it fails to close one or more TCP connections. * Version 2.01: o The 'Remote Address' and 'Local Address' columns are now sorted by the IP ...
Failed to contact key server is removed Play free games online such as Synergy Play games with custom protection such as Race Replaced the "sponsor" picture Log file is created, please post it if you ...
Connected to an idle instance. SQL> startup^C SQL> startup ORACLE instance started. 2、在双机环境下 要想启动或关闭ORACLE系统必须首先切换到root用户,如下 su - root a、启动ORACLE系统 hareg -y ...
SCGCQ00322234 EnhancementRequest Utilities to show logical block size [AF512e, 512n, 4Kn,..] SCGCQ00322257 EnhancementRequest Implemented support for 4K sector drives in CLI. SCGCQ00322317 ...
因此你必须有办法将两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法! 从HTML中分离 以下是可以使用的方法: <script language="php"> . . . 语句 与Perl...