Журналы уровня приложения, использующие log4j для нескольких приложений, не работают в weblogic - PullRequest
1 голос
/ 01 декабря 2011

У меня есть два приложения, развернутые на сервере с использованием weblogic. Я создал отдельные файлы свойств и конфигурационный сервлет для каждого приложения. Но проблема заключается в том, что регистратор добавляет файл журнала приложения, которое развернуто последним. Код прекрасно работает на tomcat, но при развертывании на сервере weblogic он ведет себя так, как будто работает только один экземпляр, и он тоже самый последний.

файл log4j.properties, который я поместил в WEB-INF:

log4j.rootLogger=INFO, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=C:abc.log
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.Append=true
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %-5p %c (%F:%L) - %m%n

Я поместил log4j-1.2.14.jar в папку lib , где находятся все библиотеки.

Инициализация его в методе сервлета init ():

public void init() throws ServletException {
    logger.info("Servlet...................");
    super.init();
    String prefix = getServletContext().getRealPath("/");
    String log4j = getServletContext().getInitParameter"log4jConfig");
    if (log4j != null) {
        PropertyConfigurator.configure(prefix + log4j);
        }
    }

и запись web.xml:

<context-param>
       <param-name>log4jConfig</param-name>
       <param-value>/WEB-INF/log4j.properties</param-value>
  </context-param>

1 Ответ

1 голос
/ 02 декабря 2011

Вы должны понимать структуру загрузчиков классов:

        Bootstrap
            |
         System
            |
         Common
         /     \
     Webapp1   Webapp2

Вот объяснения иерархии загрузчиков классов:

Если вы поместите свой log4j.jar в общий загрузчик классов, например, в $ CATALINA_BASE / lib для Tomcat, все веб-приложения будут использовать один и тот же класс,и вы сможете иметь только одну конфигурацию log4j для всех веб-приложений.

Самый простой способ решить вашу проблему - поместить отдельные копии файла log4j.jar в папки WEB-INF / lib и файлы log4j.properties в папки WEB-INF / classes ваших веб-приложений.Обратите внимание, что в этом случае вам вообще не понадобится инициализация log4j. Здесь - документация по настройке log4j для Tomcat.

ОБНОВЛЕНО Как сказано в Weblogic , модель загрузки классов немного отличается от Tomcat:

Дескриптор развертывания веб-приложения weblogic.xml содержит элемент (подэлемент элемент).По умолчанию для этого элемента установлено значение False .Установка этого элемента в True подрывает модель делегирования загрузчика классов, так что определения классов из веб-приложения загружаются в предпочтение определениям классов в загрузчиках классов более высокого уровня.Это позволяет веб-приложению использовать собственную версию стороннего класса, который также может быть частью WebLogic Server.

Пожалуйста, попробуйте установить истинно в Weblogic.После этого каждое веб-приложение, вероятно, получит собственную версию класса.

...