ski*_*ppy 4 java logging log4j
一些Log4j配置器有一个configureAndWatch()方法,它启动一个线程来观察用于配置的文件(XML文件或properties文件),并在文件发生变化时触发重新配置.
但是,如果您依赖于Log4j 默认初始化过程,则永远不会有机会调用configureAndWatch().您甚至不知道用于配置的文件(它甚至可能不是文件.)
是否有一种获得configureAndWatch()样式行为的好方法,允许动态更改日志配置,同时仍使用默认初始化过程?我假设你的配置URL最终解析为一个可以观看的文件,因为另一台服务器上的URL可能不是你想要每60秒拉一次的东西.
(我发现这个configureAndWatch()方法在Java EE 环境中是不安全的,因为单独的线程,我看到一些应用程序服务器有自己的机制来查看log4j配置文件,但我正在处理的程序目前没有运行在Java EE中.)
我之前已经废弃了答案中的所有内容,现在重新开始,我更了解你想要的东西.
以下段落描述了log4j用于确定log4j配置文件名的实际顺序.此代码尝试遵循这些规则.
http://logging.apache.org/log4j/1.2/manual.html#defaultInit
它确定要使用的log4j配置文件,然后使用它找到的文件设置PropertyConfigurator.这仅在文件位于文件系统上时才有效.如果文件位于jar内或远程HTTP URL中,则无效.
String prop = System.getProperty("log4j.configuration");
if (prop == null) prop = "log4j.properties";
URL log4jConfig = Loader.getResource(prop);
if (log4jConfig.getProtocol().equalsIgnoreCase("file")) {
PropertyConfigurator.configureAndWatch(log4jConfig.getFile().substring(1), 10000);
}
else {
// cannot monitor if file changed because URL is not a file
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6325 次 |
| 最近记录: |