Моя структура приложения WAR выглядит следующим образом:
MyApp
|_ WEB-INF/
|_ log4j.xml -> Print to File
|_ libs/
|_ abc.jar/
|_log4j.xml -> Print to STDOUT
Итак, когда мое приложение загружается, оно выбирает log4j.xml в WEB-INF и начинает входить в файл.
Но любой класс, запрашиваемый из abc.jar, запускает загрузку класса вместе с ресурсом в этом abc.jar, который заменяет запись в STDOUT. И регистрация файлов резко прекращается: (
Можем ли мы переопределить / проигнорировать базовый файл log4j.xml, доступный в файлах jar зависимостей?
Журналы веб-сервера:
loadClass(java.io.PrintStream, false)
Returning class from cache
loadClass(java.lang.StringBuilder, false)
Returning class from cache
loadClass(java.lang.StringBuffer, false)
Returning class from cache
loadClass(xxx.xxxx.ServiceHandle, false)
Searching local repositories
findClass(xxx.xxxx.ServiceHandle)
Loading class from local repository
loadClass(xxx.xxxx.ServiceNotFoundException, false)
Searching local repositories
findClass(xxx.xxxx.ServiceNotFoundException)
Loading class from local repository
loadClass(xxx.xxxx.RawDataCallback, false)
Searching local repositories
findClass(xxx.xxxx.RawDataCallback)
Loading class from local repository
loadClass(xxx.xxxx.Logger, false)
Searching local repositories
findClass(xxx.xxxx.Logger)
Loading class from local repository
loadClass(org.apache.log4j.spi.LoggerFactory, false)
Delegating to parent classloader1 java.net.URLClassLoader@2a098129
Loading class from parent
loadClass(org.apache.log4j.or.ObjectRenderer, false)
Delegating to parent classloader1 java.net.URLClassLoader@2a098129
Loading class from parent
loadClass(xxx.xxxx.Logger$DataRecordRenderer, false)
Searching local repositories
findClass(xxx.xxxx.Logger$DataRecordRenderer)
Loading class from local repository
loadClass(org.apache.log4j.LogManager, false)
Delegating to parent classloader1 java.net.URLClassLoader@2a098129
Loading class from parent
getResource(log4j.xml)
findResource(log4j.xml)
--> Returning 'jar:file:serverPath/WEB-INF/lib/xxx.xxxx-1.0.0.jar!/log4j.xml'
--> Returning 'jar:file:serverPath/WEB-INF/lib/xxx.xxxx-1.0.0.jar!/log4j.xml'
loadClass(org.apache.log4j.xml.DOMConfigurator, false)
Delegating to parent classloader1 java.net.URLClassLoader@2a098129
Loading class from parent
findResources(META-INF/services/javax.xml.parsers.DocumentBuilderFactory)
loadClass(com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl, false)
......... No more logging ...........