Ume*_*thi 6 java logging log4j tomcat6
我正在开发一个web应用程序,我有一个需要在运行时为我的impex进程生成日志文件.这是用例我正在验证XML文件并且验证错误由自定义错误处理程序处理.这个错误hanlde将是传递给底层验证器(Jaxb 2.x验证器),因此我必须在创建此错误hanlder的实例时创建日志文件.我们使用log4j作为日志API
这是在运行时创建日志文件的代码
XMLErrorHandler<Object> errorHandler=new XMLErrorHandler<Object>(logFileLocation);
logFileName=errorHandler.getLogFileName();
validator.setErrorHandler(errorHandler);
validator.validate(source);
Run Code Online (Sandbox Code Playgroud)
我在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();
}
Run Code Online (Sandbox Code Playgroud)
一切正常,文件正确创建,并由记录器写入相应的地方.但是,如果我重新启动我的服务器,实际问题就会启动,并且记录器开始将日志内容不仅附加到其当前日志文件中,而且还附加在服务器运行时为此过程创建的所有文件.以下是详细信息,假设我已经在每个日志文件中有3行的位置有3个日志(A,B,C)文件,而C是在此过程中创建的最新文件.所以,当我重新启动我的服务器时(通过重新调用我的意思是我从控制台停止了tomcat)它有些如何将数据附加到previos所有日志文件中这个fashin C仍有3行B现在有6行A现在有9行
似乎我创建的appender仍然是开放的或有参考,不确定究竟发生了什么.这方面的任何帮助都会有所帮助.
问题解决了。问题出在我正在使用的附加程序上。我的印象是 log4j 自己处理附加程序的关闭,但它没有这样做(我看到 FileAppender 代码,因为它试图关闭附加程序)。所以我自己关闭了附加程序,它解决了问题。
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |