Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tomcat中的自定义java.util.logging处理程序_Tomcat_Logging_Java.util.logging - Fatal编程技术网

tomcat中的自定义java.util.logging处理程序

tomcat中的自定义java.util.logging处理程序,tomcat,logging,java.util.logging,Tomcat,Logging,Java.util.logging,我们在一个给定系统上的所有webapp之间有一些通用的日志记录配置,我们试图将这些配置外部化到tomcat级别,而不是试图在单个webapp级别进行处理。事实证明,使用java.util.logging的webapps具有一定的挑战性,因为我们有一个自定义处理程序,而且似乎没有一种明显的方法可以让自定义处理程序与tomcat的类加载器配合使用。目前这一切都处于原型阶段 初步版本:Tomcat7.0.32,Java6。默认Tomcat7安装时部署了一个REST服务,配置中没有任何有趣之处 首先,我

我们在一个给定系统上的所有webapp之间有一些通用的日志记录配置,我们试图将这些配置外部化到tomcat级别,而不是试图在单个webapp级别进行处理。事实证明,使用
java.util.logging
的webapps具有一定的挑战性,因为我们有一个自定义处理程序,而且似乎没有一种明显的方法可以让自定义处理程序与tomcat的类加载器配合使用。目前这一切都处于原型阶段

初步版本:Tomcat7.0.32,Java6。默认Tomcat7安装时部署了一个REST服务,配置中没有任何有趣之处

首先,我创建了自定义处理程序并将jar放入
$CATALINA_HOME/lib
中,并确认所述目录位于正确的目录中,并且
common.loader
包含以下目录:


common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar

然后我修改了
logging.properties
文件并添加了处理程序:


handlers=1catalina.org.apache.juli.FileHandler、2localhost.org.apache.juli.FileHandler、3manager.org.apache.juli.FileHandler、4host-manager.org.apache.juli.FileHandler、java.util.logging.ConsoleHandler、my.custom.Handler

但是,当我运行
/startup.sh
时,我会得到以下结果:

[Loaded java.io.PrintWriter from /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar]
[Loaded java.util.logging.StreamHandler from /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar]
[Loaded java.util.logging.ConsoleHandler from /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar]
Handler error
java.lang.ClassNotFoundException: my.custom.Handler
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
    at java.util.logging.LogManager$2.run(LogManager.java:267) [...]
(这是通过
JAVA\u OPTS=-verbose:class
实现的)

我在后面看到了相关类的加载,但这看起来并不一致,可能是前面提到的REST服务(直接使用它)的产物

如果我直接将jar添加到
类路径
,我就可以让一切正常工作,但这似乎与修改加载程序相反,通常不鼓励这样做

在读取
logging.properties
之前,如何将自定义
java.util.logging.Handler
(以及稍后的格式化程序)干净地添加到类加载器中,我是否缺少一些特别的东西


或者,如果我找错了方向,我会用
java.util.logging

更好地解决多个webapp之间共享日志配置的问题。对于Tomcat范围的自定义日志,您需要将类注入Tomcat引导类加载器。因此,必须将带有自定义处理程序和所需依赖项的jar放入启动脚本类路径中。我建议在$CATALINA_BASE/bin/setenv.sh添加自定义脚本,即

#!/bin/sh

CLASSPATH="$CATALINA_BASE/bin/myhandler.jar"
或者,您可以在Tomcat启动期间加载脚本变量时动态收集所需的JAR