快速业务通道

关于Weblogic Server重启或log rotation导致server.log的i node number变化问 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

关于Weblogic Server重启或log rotation导致server.log的i node number变化问

时间:2011-01-13 BlogJava 走走停停又三年

关于Weblogic Server重启或log rotation导致server.log的i node number变化问题

前两天同事问我一个问题,说是客户那边使用Tivoli分析weblogic server日志的时候,每当server重启,Tivoli就出错,说是FileId is changed。当时就怀疑可能跟server log的iNodeNumber有关。因为没怎么仔细看过weblogic server logging的代码,也不是很确认。跟同事说,让客户通过 ls -i 确认一下对应的iNodeNumber。客户反馈说:iNodeNumber没有发生变化,崩溃,文件名没变, iNodeNumber没变,Tivoli说的FileId到底是什么? FileSystem里还有其他标识文件的东西?我有点开始怀疑这个客户了,嘿嘿。 索性,自己做个测试吧。

首先看了看weblogic的代码,log rotation的时候,只是调用了File.renameTo(),如下:

weblogic.loggin.FileStreamHandler.rotateLog()

logFile.renameTo(rotatedFile)

见鬼了, rename完了iNodeNumber还有不变的道理?看看JDK代码再说,

File.renameTo()

1     public boolean renameTo(File dest) { 2                 SecurityManager security = System.getSecurityManager(); 3                 if (security != null) { 4                     security.checkWrite(path); 5                     security.checkWrite(dest.path); 6                 } 7                 return fs.rename(this,dest); 8     }

这家伙,还是依赖于FileSystem的,再一看,FileSystem是个抽象类,rename的具体实现肯定跟具体的subclass有关了,只能看看Win32FileSystem吧,

Win32FileSystem.java

1     public boolean rename(File f1,File f2) { 2         // Keep canonicalization caches in sync after file deletion 3         // and renaming operations. Could be more clever than this 4         // (i.e.,only remove/update affected entries) but probably 5         // not worth it since these entries expire after 30 seconds 6         // anyway. 7         cache.clear(); 8         prefixCache.clear(); 9         return rename0(f1,f2); 10     } 11     private native boolean rename0(File f1,File f2);

好了,现在看到了,rename0()是个native 操作,跟共享库(.dll or .so)又扯上关系了。得, 没有本地库代码,也看不到什么实现了(不过个人感觉,本地实现调用应该是系统函数rename:  int rename(const char *old,const char *new)),只能自己做实现了。写了个小测试程序, 如下:

1 package com.bea.cs.test.file; 2 3 import java.io.File; 4 5 public class FileTest { 6 7     private File src = new File("test"); 8 9     public static void main(String args[]) 10     { 11         FileTest test = new FileTest(); 12         test.run(); 13     } 14 15     public void run() 16     { 17         rename("test1"); 18     } 19 20     private boolean rename(String name) 21     { 22         boolean ret = false; 23    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号