public static void init() throws Exception{
custmizedHandler = createHandler(auditname, 500,100, Level.INFO);
log.addHandler(custmizedHandler);
        log.setLevel(custmizedHandler.getLevel());
}
protected static Handler createHandler(String path, int size, int num, Level level)
throws Exception { String dirPath = path.substring(0, path.lastIndexOf("/"));
File file = new File(dirPath);
if (!file.exists()) {
boolean isSuccessed = file.mkdirs();
if (!isSuccessed) {
throw new IOException("!isSuccessed");
}
}
if(path.endsWith("/")) {
path = path + "audit.log";
}
Handler handler = new FileHandler(path  + getPattern(), size, num, true);
handler.setLevel(level);
handler.setEncoding("UTF-8");
setFormatter(handler); return handler;
}详细代码如上说明:例子:
产生文件:.
aaa.log.0
aaa.log.1
aaa.log.2
aaa.log.3
aaa.log.4
aaa.log.5
aaa.log.6
aaa.log.7
aaa.log.8当aaa.log.5被占用,那么文件
aaa.log.0
aaa.log.1
aaa.log.2
aaa.log.3
aaa.log.4
aaa.log.5->aaa.log.6失败在产生新文件时,1-4log文件慢慢会丢失。请问有解决方案吗?
         

解决方案 »

  1.   

    这样是不行的,但是我试了log4j
    例子: 
    产生文件:. 
    aaa.log.0 
    aaa.log.1 
    aaa.log.2 
    aaa.log.3 
    aaa.log.4 
    aaa.log.5 
    aaa.log.6 
    aaa.log.7 
    aaa.log.8 当aaa.log.5被占用,那么文件 
    aaa.log.0 -->一直在写,不管你设定的log文件的大小限制是多少
    aaa.log.1 
    aaa.log.2 
    aaa.log.3 
    aaa.log.4 
    aaa.log.5-->占用
    aaa.log.6 
    aaa.log.7 
    aaa.log.8 log不会丢失。
    我在想是不是logger类中是否也有相关的配置。
      

  2.   

    的确好像不可以的
    这个时package java.util.logging.FileHandler中的代码 private synchronized void rotate() {
    Level oldLevel = getLevel();
    setLevel(Level.OFF); super.close();
    for (int i = count-2; i >= 0; i--) {
        File f1 = files[i];
        File f2 = files[i+1];
        if (f1.exists()) {
    if (f2.exists()) {
        f2.delete();//没考虑删除失败
    }
    f1.renameTo(f2);//没考虑重命名失败
        }
    }
    try {
        open(files[0], false);
            } catch (IOException ix) {
        // We don't want to throw an exception here, but we
        // report the exception to any registered ErrorManager.
        reportError(null, ix, ErrorManager.OPEN_FAILURE); }
    setLevel(oldLevel);
        }所以导致log文件的丢失。