【发布时间】:2011-02-12 08:06:24
【问题描述】:
我正在开发一个 web 应用程序,我需要在运行时为我的 impex 进程生成日志文件。这是用例 我正在验证一个 XML 文件,并且自定义错误处理程序正在处理验证错误。此错误处理程序将传递给底层验证程序(Jaxb 2.x 验证程序),因此我必须在此错误处理程序的实例时创建日志文件正在创建。 我们使用 log4j 作为日志 API
这是在运行时创建日志文件的代码
XMLErrorHandler<Object> errorHandler=new XMLErrorHandler<Object>(logFileLocation);
logFileName=errorHandler.getLogFileName();
validator.setErrorHandler(errorHandler);
validator.validate(source);
我正在 XMLErrorHandler 构造函数中创建日志文件,因为这是我在这里唯一可以控制的一点是创建日志文件的代码
FileAppender appender;
try {
appender = new FileAppender(layout, sb.toString(), false);
log.addAppender(appender);
log.setAdditivity(false);
log.setLevel(Level.WARN);
} catch (IOException e) {
e.printStackTrace();
}
一切正常,文件正在正确创建,并且记录器正在将其写入相应的位置。 但是如果我重新启动我的服务器,真正的问题就开始了,并且记录器开始将日志内容不仅附加到其当前的日志文件,而且还附加到服务器运行时为此进程创建的所有文件。这是详细信息 假设我已经在该位置有 3 个日志(A、B、C)文件,每个日志文件中有 3 行,C 是该过程中创建的最新文件。 所以当我重新启动我的服务器时(通过重新启动我的意思是我从控制台停止了tomcat)它是如何将数据附加到这个fashin中的所有日志文件的 C还有3行 B 现在有 6 行 A 现在有 9 行
似乎我创建的附加程序仍然打开或有引用,不确定到底发生了什么。 这方面的任何帮助都会有所帮助。
【问题讨论】:
标签: java log4j tomcat6 logging