本来以为很简单的事情折腾了半天竟然没法解决。
1.用canwrite方法,返回true;晕倒
2.用filewriter强行向正在记录的日志文件写数据,本来想它会抛异常,结果竟然成功,再次晕倒。
3.csdn上狂搜半天,居然没发现一个比较好的解决方案,继续晕。。。。。
不知道各位有没有什么好办法解决呢?
12 个解决方案
#1
这种东西要用平台API比较好。
#2
多谢楼上兄弟回答。
用os的api就比较麻烦,因为肯定会用在各种平台上,如果用平台的话,复杂度大大提高~~
不知各位还有没有什么比较好的办法,曲线救国也行。。。
用os的api就比较麻烦,因为肯定会用在各种平台上,如果用平台的话,复杂度大大提高~~
不知各位还有没有什么比较好的办法,曲线救国也行。。。
#3
不会~
我想日志不会还弄个文件锁吧~~ 能写能读是当然,如果一定要判断的吧~~判断名字吧~~日志文件一般有特殊的命名规则~~
我想日志不会还弄个文件锁吧~~ 能写能读是当然,如果一定要判断的吧~~判断名字吧~~日志文件一般有特殊的命名规则~~
#4
真搞不明白,既然jdk有不同平台的版本,为什么这种东西不在jdk里面实现啊
#5
1 我觉得可以用约定来做
日期最新的一个,肯定是在用的一个
OVER
2 你做分析工具,你可以把日志复制到另一个单独目录,再对那个目录的文件分析就可以了!
日期最新的一个,肯定是在用的一个
OVER
2 你做分析工具,你可以把日志复制到另一个单独目录,再对那个目录的文件分析就可以了!
#6
多谢 java2000回复,你说的我都考虑过。
1.用日期最新的方法判断,在一个极端情况下有一个bug,就是如果从新的一天开始,到日志分析任务开始执行时刻,没有人访问web的话,apache是不会重新生成日志的,这样就会遗漏最后一个,如果对时效要求高一点,这样就会有问题
2.目前做的这个东东是给其他同事用的,水平参差,想尽量做的智能一点。
目前打算用当前时间和日志文件最后修改时间判断,如果在同一天,则不对日志处理。
还是觉得不太爽,呵呵,先这么着吧。
1.用日期最新的方法判断,在一个极端情况下有一个bug,就是如果从新的一天开始,到日志分析任务开始执行时刻,没有人访问web的话,apache是不会重新生成日志的,这样就会遗漏最后一个,如果对时效要求高一点,这样就会有问题
2.目前做的这个东东是给其他同事用的,水平参差,想尽量做的智能一点。
目前打算用当前时间和日志文件最后修改时间判断,如果在同一天,则不对日志处理。
还是觉得不太爽,呵呵,先这么着吧。
#7
只要不是在写入中,文件就可以被另一个进程写入。
最好换种思路,比如名字最后一次修改时间等。
最好换种思路,比如名字最后一次修改时间等。
#8
多谢楼上各位!
看来最初的思路,除了调用os的api外没有直接的解决方案了。多谢各位!
看来最初的思路,除了调用os的api外没有直接的解决方案了。多谢各位!
#9
~~~~飘过~~~~
~~~友情UP~~~~
#10
重写Apache包.
#11
想知道哪个正在用的日志...我有个方法...
当系统使用了日志,用户要移动、修改、删除日志都不可以的。所以你要判断哪个日志系统正在用,在文件写写一个空的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]
当系统使用了日志,用户要移动、修改、删除日志都不可以的。所以你要判断哪个日志系统正在用,在文件写写一个空的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]
#12
//系统正在用的日志是:
files[idx]
files[idx]
#1
这种东西要用平台API比较好。
#2
多谢楼上兄弟回答。
用os的api就比较麻烦,因为肯定会用在各种平台上,如果用平台的话,复杂度大大提高~~
不知各位还有没有什么比较好的办法,曲线救国也行。。。
用os的api就比较麻烦,因为肯定会用在各种平台上,如果用平台的话,复杂度大大提高~~
不知各位还有没有什么比较好的办法,曲线救国也行。。。
#3
不会~
我想日志不会还弄个文件锁吧~~ 能写能读是当然,如果一定要判断的吧~~判断名字吧~~日志文件一般有特殊的命名规则~~
我想日志不会还弄个文件锁吧~~ 能写能读是当然,如果一定要判断的吧~~判断名字吧~~日志文件一般有特殊的命名规则~~
#4
真搞不明白,既然jdk有不同平台的版本,为什么这种东西不在jdk里面实现啊
#5
1 我觉得可以用约定来做
日期最新的一个,肯定是在用的一个
OVER
2 你做分析工具,你可以把日志复制到另一个单独目录,再对那个目录的文件分析就可以了!
日期最新的一个,肯定是在用的一个
OVER
2 你做分析工具,你可以把日志复制到另一个单独目录,再对那个目录的文件分析就可以了!
#6
多谢 java2000回复,你说的我都考虑过。
1.用日期最新的方法判断,在一个极端情况下有一个bug,就是如果从新的一天开始,到日志分析任务开始执行时刻,没有人访问web的话,apache是不会重新生成日志的,这样就会遗漏最后一个,如果对时效要求高一点,这样就会有问题
2.目前做的这个东东是给其他同事用的,水平参差,想尽量做的智能一点。
目前打算用当前时间和日志文件最后修改时间判断,如果在同一天,则不对日志处理。
还是觉得不太爽,呵呵,先这么着吧。
1.用日期最新的方法判断,在一个极端情况下有一个bug,就是如果从新的一天开始,到日志分析任务开始执行时刻,没有人访问web的话,apache是不会重新生成日志的,这样就会遗漏最后一个,如果对时效要求高一点,这样就会有问题
2.目前做的这个东东是给其他同事用的,水平参差,想尽量做的智能一点。
目前打算用当前时间和日志文件最后修改时间判断,如果在同一天,则不对日志处理。
还是觉得不太爽,呵呵,先这么着吧。
#7
只要不是在写入中,文件就可以被另一个进程写入。
最好换种思路,比如名字最后一次修改时间等。
最好换种思路,比如名字最后一次修改时间等。
#8
多谢楼上各位!
看来最初的思路,除了调用os的api外没有直接的解决方案了。多谢各位!
看来最初的思路,除了调用os的api外没有直接的解决方案了。多谢各位!
#9
~~~~飘过~~~~
~~~友情UP~~~~
#10
重写Apache包.
#11
想知道哪个正在用的日志...我有个方法...
当系统使用了日志,用户要移动、修改、删除日志都不可以的。所以你要判断哪个日志系统正在用,在文件写写一个空的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]
当系统使用了日志,用户要移动、修改、删除日志都不可以的。所以你要判断哪个日志系统正在用,在文件写写一个空的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]
#12
//系统正在用的日志是:
files[idx]
files[idx]