如何发现加载的 log4j2 配置的完整路径?
How do I discover the complete path of the loaded log4j2 configuration?
我的应用程序服务器正在加载一个 log4j2.properties 文件,但我找不到它在哪里。我想知道此 conf 文件的完整路径。
如果我像 this question 中回答的那样使用选项 -Dlog4j.debug
启动 jvm,我可以轻松地让 log4j2 显示搜索到的配置文件,但它不显示完整路径。
使用调试参数我得到这个输出:
[err] DEBUG StatusLogger Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@239c2809
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.xml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
由于最后显示的文件名是log4j2-test.xml
,这是加载的文件。问题是,如果我将我的文件命名为 log4j2.xml
,则会在它之前加载另一个名为 log4j2.properties
的配置。而且我找不到这个文件在哪里!必须有一种方法可以发现它是从哪里加载的。
在您的程序中,您可以执行以下操作:
URL url = org.apache.logging.log4j.LogManager.class.getResource("/log4j2.properties");
System.out.println(url);
这应该使用 LogManager
class 的 classloader 在 classpath 的根目录显示 "log4j2.properties" 文件的位置.
我的应用程序服务器正在加载一个 log4j2.properties 文件,但我找不到它在哪里。我想知道此 conf 文件的完整路径。
如果我像 this question 中回答的那样使用选项 -Dlog4j.debug
启动 jvm,我可以轻松地让 log4j2 显示搜索到的配置文件,但它不显示完整路径。
使用调试参数我得到这个输出:
[err] DEBUG StatusLogger Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@239c2809
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.properties] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.yaml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.json] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.jsn] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-testago service.xml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.properties] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.yaml] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.json] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using com.ibm.ws.classloading.internal.AppClassLoader@8bc0851 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414 class loader.
[err] TRACE StatusLogger Trying to find [log4j2-test.jsn] using ClassLoader.getSystemResource().
[err] TRACE StatusLogger Trying to find [log4j2-test.xml] using context class loader com.ibm.ws.classloading.internal.ThreadContextClassLoader@834b414.
由于最后显示的文件名是log4j2-test.xml
,这是加载的文件。问题是,如果我将我的文件命名为 log4j2.xml
,则会在它之前加载另一个名为 log4j2.properties
的配置。而且我找不到这个文件在哪里!必须有一种方法可以发现它是从哪里加载的。
在您的程序中,您可以执行以下操作:
URL url = org.apache.logging.log4j.LogManager.class.getResource("/log4j2.properties");
System.out.println(url);
这应该使用 LogManager
class 的 classloader 在 classpath 的根目录显示 "log4j2.properties" 文件的位置.