2011-12-29 6 views
4

Я использую logback в EAR-файле, который содержит JAR (ejb) и WAR. Это должно запускаться на сервере Glassfish v3. Все работает, за исключением загрузки logback.xml. Это невозможно найти. Я строю проект с Netbeans. Используемые внешние библиотеки находятся в каталоге lib-Directory EAR (что не должно иметь значения, где они ...). Я планировал поместить файл logback.xml в корневой каталог или другой подкаталог в EAR. Путь Classpath указан в файлах манифеста JAR и WAR. Но для некоторых причин logback.xml не был найден ... (Ухаживание сборки содержит logback.xml;))Glassfish 3 + ear + logback.xml

Я пробовал каждое местонахождение logback.xml. Даже в WAR или JAR. Ничего не работало ...

Если я использую автономную WAR, тогда все работает нормально, и logback.xml был найден. (ОК. Не все. Изменение класса в манифесте не работает ...)

Так что мой вопрос: Кто-нибудь уже получает logback.xml для запуска в EAR?

Вот мой манифест (я надеюсь, что это исто правильный синтаксис):

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.2 
Created-By: 1.7.0_147-icedtea-b147 (Oracle Corporation) 
Class-Path: ./ 

Надежда кто-то может мне помочь.

Привет

+0

Примечание: вы можете использовать собственный журнал Glassfish. Тогда вам нужен модуль JDK14 slf4j вместо logback. Это то, что мы используем –

+0

Я использую logback с slf4j как backend. – Knox

+0

Также обратите внимание, что вы можете подключить прослушиватель к протоколу регистрации, чтобы вы могли видеть, где он ищет файлы конфигурации. Это может вам помочь. –

ответ

4

Я решил эту проблему, создав простой отделенной банку, что развернуть разобранном внутри EAR (с использованием Maven и отдельный модуль config.jar). На практике logback.xml был вставлен в lib/config.jar/logback.xml

+1

Итак, вы по существу ставите новую банку в путь класса, общий для всех развертываний. Это, по моему опыту, единственный способ увидеть вещи по развернутым артефактам. Обратите внимание, что сервер приложений не может помочь вам централизовать журналы, если вам нужно кластеризовать. –

2

Я нашел решение, не поставив еще одну банку в пути к классам. 1) Просто поместите файл logback.xml в путь класса военного приложения (/ src/java/например); 2) Используйте контекст сервлет, чтобы загрузить файл, используя getResourceAsStream и, в конечном счете, установить некоторые параметры (такие как имя приложения), как и в отрезали ниже:

@Override 
    public void contextInitialized(ServletContextEvent sce) { 
     System.out.println("Logback contextInitialized !!!!"); 
     LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
     JoranConfigurator jc = new JoranConfigurator(); 
     jc.setContext(context); context.reset(); 
     // override default configuration 
     // inject the name of the current application as "application-name" 
     // property of the LoggerContext 
     context.putProperty("application-name", "menu_dinamico"); 
     try { 
      InputStream is = getClass().getClassLoader().getResourceAsStream("logback.xml"); 
      if(is == null) { 
       System.out.println("Logback xml file non trovato"); 
      } 
      else { 
       jc.doConfigure(is); 
      } 
     } catch (JoranException ex) { 
      System.out.println("Logback contextInitialized error"); 
      StatusPrinter.print(context); 
      ex.printStackTrace(); 
     } 
    } 

Теперь файл logback.xml распознается.

+0

Hi Maxqua72, я следил за вашими советами и делал то же самое в конфигурации логического уровня уровня EAR. Попытка манипулировать моими элементами пути пути или изменить структуру уха была намного сложнее с точки зрения побочных эффектов! – javapapo

+0

Это решение сработало, но имейте в виду, что конфигурация будет загружена после запуска. поэтому, если у вас есть какой-либо другой класс, который настраивается перед запуском (например, JPA, Quartz, Spring, ...), они будут регистрироваться для отладки в консоли до завершения развертывания. В итоге я пошел на принятое решение. – unziberla