为什么创建.lck文件而不是由java日志记录删除

时间:2011-04-20 13:13:21

标签: servlets logging weblogic java.util.logging

我正在尝试使用java.util.logging实现应用程序级别记录器(weblogic中部署的webapps)。

我从apache JULI日志系统中获取了ClassLoaderLogManager,因为它已经实现了应用程序级别的日志记录。

这就是我的servlet代码( SimpleServlet .java)的样子:

ClassLoaderLogManager ClassLoaderLogManager = new ClassLoaderLogManager () ;
String nameoflogger = SimpleServlet.class.getName() ;   
boolean status = ClassLoaderLogManager .addLogger(nameoflogger);   
if(status) 
{
     Logger logger = ClassLoaderLogManager .getLogger(nameoflogger);   
     logger.log(Level.FINEST, "testing SimpleServlet FINEST");
     logger.log(Level.INFO, "testing SimpleServlet INFO");
     logger.log(Level.SEVERE, "testing SimpleServlet SEVERE");   
}    
ClassLoaderLogManager .reset();  

我在java_home / jre / lib中有logging.properties文件,如下所示

handlers= java.util.logging.FileHandler

#.level= INFO

# default file output is in user's home directory.

java.util.logging.FileHandler.pattern = %h/java_%g.log
java.util.logging.FileHandler.limit = 200
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.append  = true
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter


# Limit the message that are printed on the console to INFO and above.
#java.util.logging.ConsoleHandler.level = INFO
#java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

package8.SimpleServlet.handler = java.util.logging.FileHandler

############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
package8.SimpleServlet.level = SEVERE

因此,当我运行webapp时 - 当我访问webapp时,我希望创建java_0.log,java_1.log(日志文件轮换) - 等。但我也看到java0.log.lck,java1.log.lck。

日志文件仅按预期显示SEVERE级别日志。

为什么会这样?如果我在java代码端创建了一个处理程序,关闭处理程序将解决问题。买不在这里处理吗?

或者是因为我在使用 org.apache时使用 java.util.logging.FileHandler 而不是 org.apache.juli.FileHandler 。 juli.ClassLoaderLogManager  ??

1 个答案:

答案 0 :(得分:2)

当FileHandler打开时,您应该会看到锁定文件。如果在VM退出后看到它们停留,那么这是因为FileHandler未关闭,VM在处理程序关闭挂钩运行时停止或崩溃,或者在尝试删除它时发生了I / O异常。 / p>

您可能会遇到JDK-8060132 Handlers configured on abstract nodes in logging.properties are not always properly closed.相关:JDK-6274920: JDK logger holds strong reference to java.util.logging.Logger instances.

查看配置,您在根记录器上安装了FileHandler,并在SimpleServlet上安装了FileHandler。由于ClassLoaderLogManager未以JVM全局方式使用,因此在启动本地ClassLoaderLogManager之前,已安装的默认LogManager正在创建FileHandlers。从您拥有的java_home / jre / lib设备中删除FileHandler条目,并使用ClassLoaderLogManager.readConfiguration方法加载webapp本地配置。