【发布时间】:2014-06-11 07:26:41
【问题描述】:
我有一个基于 servlet 的 JEE 应用程序,已部署到 OpenShift。我正在使用 java.util.logging。
我希望能够在运行时更改日志记录级别。
最初,我以为我可以更改 logging.properties 文件,更改将反映在日志中。但是我在本地机器上试过了,它没有用。我需要设置一个计划任务来每隔 10 秒左右读取一次配置。之后,在我的本地机器上,我可以看到日志记录级别反映了我在运行时所做的更改。
但是,这在部署到 OpenShift 时不起作用。我已验证计划任务每 10 秒运行一次,读取配置时未报告 IOExceptions,但更改的日志记录级别未反映在日志中。有问题的日志是
- ./app-root/logs/jbossews.log
- ./jbossews/logs/com.haxwell.apps.questions.20YY-MM-DD.log.
两者都记录了相同的信息。
为了混淆问题,logging.properties 文件有几个副本。首先,有我创建的“项目”logging.properties,还有“OpenShift”logging.properties。作为测试,我在两个文件中设置了不同的日志级别,并部署了它们,以验证它是我的“项目”logging.properties 文件控制日志输出。
但是,它是哪个“项目”logging.properties 文件?考虑以下输出:
[ OPENSHIFT_HOME_DIR\ ]\> md5sum 'find . -name logging.properties' | sort
...
926a349aa90021e91868e9b53fcae1da ./jbossews/template/.openshift/config/logging.properties
ba14a684dcddbd436b28d405a461fdb0 ./app-deployments/.../src/main/webapp/WEB-INF/classes/logging.properties
ba14a684dcddbd436b28d405a461fdb0 ./app-deployments/.../target/quizki/WEB-INF/classes/logging.properties
ba14a684dcddbd436b28d405a461fdb0 ./app-root/runtime/repo/src/main/webapp/WEB-INF/classes/logging.properties
ba14a684dcddbd436b28d405a461fdb0 ./app-root/runtime/repo/target/quizki/WEB-INF/classes/logging.properties
ba14a684dcddbd436b28d405a461fdb0 ./jbossews/work/Catalina/localhost/_/WEB-INF/classes/logging.properties
d420b80678109ed2aa9ec47177d28d79 ./app-deployments/.../repo/.openshift/config/logging.properties
d420b80678109ed2aa9ec47177d28d79 ./app-root/runtime/repo/.openshift/config/logging.properties
d420b80678109ed2aa9ec47177d28d79 ./jbossews/conf/logging.properties
“项目”logging.properties 文件有五个副本。
我同时对它们中的每一个进行了相同的更改,但它们似乎都不是计划任务执行 LogManager.readConfiguration() 时读取的文件。
所以,总而言之,我有一个在 Tomcat 中运行的 JEE 应用程序。有一个计划任务每 10 秒执行一次,调用 java.util.logging.LogManager.readConfiguration()。我希望如果我在不超过 11 秒后更改 ./WEB-INF/classes/logging.properties 文件,我应该会看到该更改反映在输出日志中记录的内容中。
这在我的本地机器上按预期工作。它不适用于 OpenShift。
谁能告诉我如何在 OpenShift 运行时更改我的 java.util.logging 级别?
提前谢谢你。
【问题讨论】: