2013-12-06 5 views
13

Я настроил GlassFish 3 использовать SLF4J в прошлом с помощью моста SLF4J Юль, и она работала отлично. Проблема, с которой я столкнулся сейчас, заключается в том, что если я использую одну и ту же настройку, SLF4J жалуется на то, что существуют дублирующие привязки SLF4J на пути к классам, и после поиска сама стеклянная рыба содержит эту ссылку.не может получить SLF4J работы с GlassFish 4

Как получить SLF4J работает? Я попытался сделать свою зависимость от SLF4J-API, как это предусмотрено, а затем удалил LogBack Classic, так как glassfish уже содержит некоторый код восстановления. Выполнение этих действий не дает никаких успешных результатов.

Walter

+0

Можете ли вы добавить некоторые подробности о сообщениях об ошибках вы получите? – foch

+0

Когда я настраиваю Glassfish на использование SLF4J, все мои сообщения пропадают по существу, без ошибок. – Walter

ответ

6

Это может поможет вам

Скачать Glassfish 4, SLF4J и Logback

Стоп GF4

$GF_INSTALL\bin>asadmin stop-domain 

, а затем

Copy

  • июлю к SLF4J-1.7.5
  • SLF4J-апи-1.7.5
  • Logback-ядро-1.0.13
  • Logback-классическом 1.0.13

в

$ GF_INSTALL/GlassFish/Библиотека/эндо rsed

Создать logback.xml в

$ GF_INSTALL/GlassFish/домены/domain1/CONFIG

содержащий

<configuration debug="true" scan="true"> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>/tmp/gf_server.log</file> 
     <append>true</append> 
     <encoder> 
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{52} - %msg%n</Pattern> 
     </encoder> 
    </appender> 
    <root> 
     <level value="INFO"/> 
     <appender-ref ref="FILE"/> 
    </root> 
</configuration> 

Изменить

$ GF_INSTALL/glassfish/domains/domain1/config/logging.свойства

и заменяющие

handlers=java.util.logging.ConsoleHandler 
handlerServices=com.sun.enterprise.server.logging.GFFileHandler 
java.util.logging.ConsoleHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter 
com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.ODLLogFormatter 
com.sun.enterprise.server.logging.GFFileHandler.file=${com.sun.aas.instanceRoot}/logs/server.log 
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=0 
com.sun.enterprise.server.logging.GFFileHandler.flushFrequency=1 
java.util.logging.FileHandler.limit=50000 
com.sun.enterprise.server.logging.GFFileHandler.logtoConsole=false 
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=2000000 
com.sun.enterprise.server.logging.GFFileHandler.excludeFields= 
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=true 
com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging=false 
java.util.logging.FileHandler.count=1 
com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours=0 
log4j.logger.org.hibernate.validator.util.Version=warn 
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=0 
com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange=false 
java.util.logging.FileHandler.pattern=%h/java%u.log 
java.util.logging.FileHandler.formatter=java.util.logging.XMLFormatter 

с

handlers=org.slf4j.bridge.SLF4JBridgeHandler 
handlerServices=com.sun.enterprise.server.logging.GFFileHandler 
java.util.logging.ConsoleHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter 
com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.ODLLogFormatter 
com.sun.enterprise.server.logging.GFFileHandler.file=/tmp/server.log 
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=0 
com.sun.enterprise.server.logging.GFFileHandler.flushFrequency=1 
java.util.logging.FileHandler.limit=50000 
com.sun.enterprise.server.logging.GFFileHandler.logtoConsole=false 
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=2000000 
com.sun.enterprise.server.logging.GFFileHandler.excludeFields= 
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=true 
com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging=false 
java.util.logging.FileHandler.count=1 
com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours=0 
log4j.logger.org.hibernate.validator.util.Version=warn 
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=0 
com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange=false 
java.util.logging.FileHandler.pattern=%h/java%u.log 
com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter 
com.sun.enterprise.server.logging.GFFileHandler.alarms=false 

Добавить это две новые опции для виртуальной машины Java

предметной области> configs-> config-> Java-конфигурации

в

$ GF_INSTALL/GlassFish/домены/domain1/конфигурации/domain.xml

<jvm-options>-Djava.util.logging.config.file=${com.sun.aas.instanceRoot}/config/logging.properties</jvm-options> 
<jvm-options>-Dlogback.configurationFile=file:///${com.sun.aas.instanceRoot}/config/logback.xml</jvm-options> 

затем начать GF4 снова

$ GF_INSTALL \ Bin> старт asadmin -область

+0

Часть того, что похоже на то, что я уже сделал, надеюсь попробовать это в течение следующих 2 дней и отчитаться. Спасибо, – Walter

+0

Добро пожаловать, Уолтер, он работает как ожидалось для меня в чистом gf4. – vzamanillo

+0

На первый взгляд, похоже, он работает; однако я только пробовал подмножество этих вещей: важный, который у меня уже был (SLF4JBridgeHandler), я обновил java.util.logging.config.file и logback.configurationFile до локально предоставленного. Я заметил, что хотя моя конфигурация говорит DEBUG для корневого уровня, она регистрирует только INFO или выше. – Walter

1

Если у кого-то есть проблемы с настроенным ch.qos.logback.core.rolling.RollingFileAppender, у меня может быть решение для вас.

Проблема заключается в том, что, следуя инструкциям @vzamanillo, сам журнал регистрации инициализируется дважды. Это вызвано изоляцией класса GlassFish (один раз с помощью основного ClassLoader, один раз EAR ClassLoader). Это становится видимым, если вы настраиваете logback с debug=true. Если теперь используется RollingFileAppender, два OutputStreams были открыты в том же настроенном файле журнала. Это предотвращает удаление файла журнала во время опрокидывания (отображается в режиме отладки).

Чтобы устранить эту проблему, я переместил библиотеки с /modules/endorsed в /domains/domain1/lib/ext. Теперь GlassFish 4 (бетон Payara) инициализирует logback только один раз, и все работает так, как ожидалось.

Кстати: для замены регистрации JUL, указывая <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator" />, это ДОЛЖНО, в противном случае вы столкнулись с большими проблемами с производительностью.

Для отправки также рубок потенциальной LIBS третьих сторон в SLF4J, не забудьте установить диспетчерские банки, а также, которые есть:

  • JCL-над-slf4j.jar
  • июлю -в-slf4j.jar
  • log4j-над-slf4j.jar
Смежные вопросы