我有一个产品用于运行我的应用程序(我已经写过)。它是一个访问单个日志文件的多线程应用程序。我面临的问题是,每次启动应用程序日志文件时都会附加。只有当我重新启动产品时,才会创建新的日志文件。但我希望每次我的应用程序运行时,我只想在我的日志文件中添加新内容。
以下是代码。
//Log4j initialization
public void initLog4j() throws MyException {
if (logfile != null ){
myLog4j = Logger.getLogger("MY_LOG");
try {
appender = new FileAppender(new PatternLayout("%m%n"),logfile.getAbsolutePath(),false);
appender.setAppend(false);
myLog4j.addAppender(appender);
myLog4j.setLevel((Level) Level.DEBUG);
} catch (IOException e) {
throw new MyException(104, logfile.getAbsolutePath());
}
}
//Stopping to write to log4j
public void stop() {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
writeToLog4j(INFO,new StringBuilder(name).append(" stop: ").append(dateFormat.format(new Date())).toString(),true);
}
我到目前为止尝试的是我尝试删除该文件,但由于没有发布FileDescriptor,因此没有删除。所以我在stop()函数
中添加了以下代码if(null != appender) {
appender.close();
}
生成此新文件或覆盖现有文件后。但是每次运行我的应用程序时,每次尝试写入logfile时都会收到以下消息
log4j:ERROR尝试附加到名为[null]的已关闭的appender。
请有人帮我解决这个问题。
答案 0 :(得分:1)
错误消息表明您必须在关闭后删除appender。 似乎log4j不会自动执行此操作。