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