现在用java做一个apache的日志分析工具,但是在apache的日志目录中,有一个是当前apache正在记录的日志文件。准备忽略该文件,但是不知道用什么方法判断哪个文件是apache正在用的日志。本来以为很简单的事情折腾了半天竟然没法解决。1.用canwrite方法,返回true;晕倒
2.用filewriter强行向正在记录的日志文件写数据,本来想它会抛异常,结果竟然成功,再次晕倒。
3.csdn上狂搜半天,居然没发现一个比较好的解决方案,继续晕。。不知道各位有没有什么好办法解决呢?

解决方案 »

  1.   

    这种东西要用平台API比较好。
      

  2.   

    多谢楼上兄弟回答。
    用os的api就比较麻烦,因为肯定会用在各种平台上,如果用平台的话,复杂度大大提高~~
    不知各位还有没有什么比较好的办法,曲线救国也行
      

  3.   

    真搞不明白,既然jdk有不同平台的版本,为什么这种东西不在jdk里面实现啊
      

  4.   

    1 我觉得可以用约定来做日期最新的一个,肯定是在用的一个OVER2 你做分析工具,你可以把日志复制到另一个单独目录,再对那个目录的文件分析就可以了!
      

  5.   

    多谢 java2000回复,你说的我都考虑过。1.用日期最新的方法判断,在一个极端情况下有一个bug,就是如果从新的一天开始,到日志分析任务开始执行时刻,没有人访问web的话,apache是不会重新生成日志的,这样就会遗漏最后一个,如果对时效要求高一点,这样就会有问题2.目前做的这个东东是给其他同事用的,水平参差,想尽量做的智能一点。目前打算用当前时间和日志文件最后修改时间判断,如果在同一天,则不对日志处理。还是觉得不太爽,呵呵,先这么着吧。
      

  6.   

    多谢楼上各位!看来最初的思路,除了调用os的api外没有直接的解决方案了。多谢各位!
      

  7.   

    想知道哪个正在用的日志...我有个方法...当系统使用了日志,用户要移动、修改、删除日志都不可以的。所以你要判断哪个日志系统正在用,在文件写写一个空的byte就行。File files = new File("日志目录");int idx;try{
       for(int i = 0 ; i < files.length ; i++){
           FileOutputStream fos = new FileOutputStream(files[i]);
           fos.write((byte)0);        
           fos.close();
       }
    }catch(Exception ex){
        idx = i;
    }//系统正在用的日志是:
    files[i]
      

  8.   

    //系统正在用的日志是: 
    files[idx]