Java 需要关闭七月的其他文件处理程序吗?

Java 需要关闭七月的其他文件处理程序吗?,java,jakarta-ee,websphere,java.util.logging,Java,Jakarta Ee,Websphere,Java.util.logging,我使用javautil日志来登录一个小型javaee应用程序。为了添加一个额外的FileHandler(例如错误/警告),我创建了一个LoggerFactory,它创建实际的记录器,并静态地将FileHandler添加到“主”记录器 问题是:我如何避免这种情况?我必须在最后关闭filehandler吗?但是在哪里呢?由于这是一个JavaEE应用程序,我不认为您是一个退出点,是吗?为什么日志文件会得到..log.0.X,而不仅仅是..log.0 谢谢, Ingo首先,您不允许在EJB中使用java

我使用javautil日志来登录一个小型javaee应用程序。为了添加一个额外的FileHandler(例如错误/警告),我创建了一个LoggerFactory,它创建实际的记录器,并静态地将FileHandler添加到“主”记录器

问题是:我如何避免这种情况?我必须在最后关闭filehandler吗?但是在哪里呢?由于这是一个JavaEE应用程序,我不认为您是一个退出点,是吗?为什么日志文件会得到..log.0.X,而不仅仅是..log.0

谢谢,
Ingo

首先,您不允许在EJB中使用
java.io
类:

本规范第21.2.2节:

企业bean不能使用 试图访问的java.io包 文件中的文件和目录 系统

这意味着您也不应该使用那些反过来使用
java.io
类的类,除非您通过询问容器来获得它们

但是,如果创建一个急切加载的单例会话bean并在
@PreDestroy
上执行清理:

@Startup 
@Singleton 
public class FileHandlerCloser {

 @PreDestroy
 public void closeFileHandlers() {
  // close file handlers
 }

}

规范对此不是很清楚,但我认为单例bean在所有其他bean之后会被销毁。

在Glassfish中,您可以使用。在JBoss中,您可以使用
StartupServiceMBean
。您使用的是什么应用服务器?

我使用的是Websphere Application server 7(不是社区版)。您还知道此应用程序服务器的名称吗?我应该/可以通过ServletContextListener处理它吗?这是Web应用还是JEE应用?换句话说,您是仅在servlet、JSP等内部使用记录器,还是在EJB内部也使用记录器?如果您没有使用EJB,则可以使用
ServletContextListener
。否则那就不行了。目前我只有MDB,没有servlet,换句话说,是一个JEE应用程序,我在EJB中使用记录器。我没有使用WebSphere。但是试试我的另一个答案。我在WAS手册中搜索类似生命周期侦听器的内容。我提出了“启动服务bean”。我终于开始工作了。谢谢
  error.log.0
  error.log.0.1
  error.log.0.1.lck
  error.log.0.2
  error.log.0.2.lck
  error.log.0.3
  error.log.0.3.lck
  error.log.0.lck
@Startup 
@Singleton 
public class FileHandlerCloser {

 @PreDestroy
 public void closeFileHandlers() {
  // close file handlers
 }

}