конфликт log4j.xml в нескольких банках в одном файле WAR - PullRequest
0 голосов
/ 04 сентября 2018

Моя структура приложения 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 ...........

...