我需要获取在 logging.properties 中配置的 catalina.out 文件的路径。
有没有办法在不知道属性文件路径的情况下通过 java 检索属性“1catalina.org.apache.juli.FileHandler.directory”?
如果我对您的理解正确,那么您想读取 Tomcatlogging.properties
文件的属性。正如您在Tomcat FAQ for Logging中看到的,java.util.logging.config.file
用于定义属性文件的路径。
然后,您可以通过Java System Properties检索此路径:
String pathLogProps = System.getProperty("java.util.logging.config.file");
Properties properties = new Properties();
try {
properties.load(new FileInputStream(pathLogProps));
System.out.println(prop.getProperty("database"));
} catch (IOException ex) {
ex.printStackTrace();
}
如果未设置,我将遵循Apache Tomcat 7 Logging Documentation中的提示:
JULI 默认启用,除了常规的全局 java.util.logging 配置外,还支持每个类加载器配置。这意味着可以在以下层配置日志记录:
- 在全球范围内。这通常在
${catalina.base}/conf/logging.properties
文件中完成。该文件由启动脚本设置的 java.util.logging.config.file 系统属性指定。- 如果不可读或未配置,则默认使用
${java.home}/lib/logging.properties
JRE 中的文件。在网络应用程序中。该文件将是WEB-INF/classes/logging.properties
默认情况下,logging.properties
文件的路径应catalina.base
分别在环境变量中可用CATALINA_BASE
。
该文件catalina.out
既没有在任何系统属性中指定,也没有在logging.properties
(看看,它不存在)中指定。
相反,catalina.out
它是由启动脚本的基于 shell 的输出重定向从内部bin/catalina.sh
(或bin/catalina.bat
)创建的。这意味着该文件仅在您使用这些脚本或模拟此行为的脚本启动 Tomcat 时可用。例如,如果您jsvc
在 *NIX 平台或 Tomcat Windows 服务上使用,则logs/catalina.out
不会创建该文件(至少默认情况下不会)。
如果你想看看文件是否存在,你可以打赌它在$CATALINA_BASE/logs/catalina.out
. Tomcat 的最新版本定义了catalina.base
系统属性,因此您可以轻松查看如下所示:
File catalinaOut = new File(System.getProperty("catalina.base"), "logs/catalina.out");
if(catalinaOut.exists())
{
// Do whatever you want
}