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文件慢慢会丢失。请问有解决方案吗?
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文件慢慢会丢失。请问有解决方案吗?
例子:
产生文件:.
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类中是否也有相关的配置。
这个时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文件的丢失。