我研究了log4j的源,发现log4j无法创建新的日志文件,它只是在删除日志文件时将错误消息打印到system.err
/**
This method determines if there is a sense in attempting to append.
It checks whether there is a set output target and also if
there is a set layout. If these checks fail, then the boolean
value false
is returned. */
protected boolean checkEntryConditions() {
if(this.closed) {
LogLog.warn("Not allowed to write to a closed appender.");
return false;
}
if(this.qw == null) {
errorHandler.error("No output stream or file set for the appender named ["+
name+"].");
return false;
}
if(this.layout == null) {
errorHandler.error("No layout set for the appender named ["+ name+"].");
return false;
}
return true;
}
我认为有两种解决方法
>创建另一个cron线程以监视日志文件
>在getLog或getInstance(singleton)中添加判断,检查日志文件是否存在,如果不存在则初始化log4j