我们目前正在使用Tomcat 7,使用-Djava.util.logging.config.file指定的单一日志配置,以及使用-Djava.util.logging.manager =“org.apache.juli.ClassLoaderLogManager”的默认ClassLoaderLogManager。这适用于一次性启动配置。在运行时重新加载tomcat日志记录?
我们有几个servlet和其他代码在servlet上下文之外运行。我们在我们完全控制的专用tomcat服务器上运行,并且我们希望所有代码都使用相同的日志配置。我们使用java.util.logging API进行日志记录。这意味着LogManager.getLogManager()。getLogger(name)需要工作,并且该Logger.isLoggable(Level)需要工作。
ClassLoaderLogManager似乎与我们的情况相反:允许servlet指定单独的日志设置。我们希望将所有日志控制在一个地方。但是,我们做希望像改进FileHandlers的其他JULI好处。
现在的问题:我怎样才能重新加载这些设置从运行时的文件没有重新加载应用程序?
我已经试过什么:
- LogManager.getLogManger.readConfiguration():结果在ClassLoaderLogManager有效NOOP因为Thread.currentThread.getContextClassLoader()是不是系统类加载器。
- 显式设置Thread.setContextClassLoader(ClassLoader.getSystemClassLoader()),然后调用以上。这实际上是读取配置文件(在调试器中逐步完成的),但它并未将更改传播到包含的ClassLoaders中的现有记录器。 Logger.setLevel()从未在现有记录器上调用过。
- 也调用reset()之前这些调用似乎并没有改变任何东西。
- JMX似乎只暴露伐木者单个类加载器(可能是系统类加载器)
您是否尝试过JMX? – 2013-02-28 17:03:36
什么,具体与JMX? JConsole显示了java.util.logging上暴露的内容,但它似乎只是顶级ClassLoader的一部分。例如,没有记录来自servlet的类。 – TREE 2013-02-28 17:28:16
JConsole ist correct,但是你可以看到[here](http://i.imgur.com/7mNwh5D.png) – 2013-02-28 17:40:24