LOG4J конфликтует с JBOSS и Java-программой - PullRequest
1 голос
/ 15 февраля 2012

Я запустил java-сервер из jar-файла, который использует log4j (RollingFile и Console appender).Один: нет проблем, это работает.У меня есть сервер JBoss, использующий log4j (установка по умолчанию).Когда все запускается в одиночку, все в порядке.

Когда я сначала запускаю свой сервер Java и JBoss, проблем тоже не возникает.

Однако при первом запуске JBoss и ТО после запуска сервера java последний не запускается.ничего не регистрировать, и JBoss отправляет мне следующее: ОШИБКА [ServerThread] Не удалось инициализировать

java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2297)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2766)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:297)
        at org.jboss.invocation.pooled.interfaces.OptimizedObjectInputStream.<init>(OptimizedObjectInputStream.java:147)
        at org.jboss.invocation.pooled.server.ServerThread.dorun(ServerThread.java:265)
        at org.jboss.invocation.pooled.server.ServerThread.run(ServerThread.java:156)
log4j:WARN Detected problem with connection: java.net.SocketException: Broken pipe

Возможно ли конфликт между двумя серверами, использующими LOG4J?Я ничего не нашел в сети.

Спасибо

ADDENDUM

  • JBoss и сервер Java находятся в разных каталогах
  • JBoss и сервер Java не имеют общего порта (8080/8433 -> JBoss и 20400 -> Java)
  • JBoss и сервер Java имеют свои собственные log4jxxxx.jar в своих собственныхпапка библиотеки
  • версия Java Log4j: log4j-1.2.16.jar (я тоже пробовал 1.2.17)
  • версия JBoss: jboss-5.1.0.GA
  • Обазаписывать в разные файлы

Вот файлы конфигурации: (в основном только для консоли и файла приложения)

Java

      <!--  mocutil import -->
        <appender name="mocutilImport" class="org.apache.log4j.RollingFileAppender">
                <param name="Threshold" value="INFO" />
                <param name="File" value="log/mocutilImport.log" />
                <param name="MaxFileSize" value="5000KB" />
            <!-- Keep five backup file -->
            <param name="MaxBackupIndex" value="5"/>
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d %-5p - %m%n" />
                </layout>
        </appender>
        <appender name="NectarMotrServer" class="org.apache.log4j.RollingFileAppender">
                <param name="Threshold" value="INFO" />
                <param name="File" value="log/NectarMotrServer.log" />
                <param name="MaxFileSize" value="5000KB" />
            <!-- Keep five backup file -->
            <param name="MaxBackupIndex" value="5"/>
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d %-5p - %m%n" />
                </layout>
        </appender>
        <appender name="NectarMotrServerDev" class="org.apache.log4j.RollingFileAppender">
                <param name="Threshold" value="DEBUG" />
                <param name="File" value="log/NectarMotrServerDev.log" />
                <param name="MaxFileSize" value="5000KB" />
            <!-- Keep five backup file -->
            <param name="MaxBackupIndex" value="5"/>
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d %c{1} [%t] %p - %m%n" />
                </layout>
        </appender>
    <!--  Default  -->
        <appender name="console" class="org.apache.log4j.ConsoleAppender">
                <param name="Threshold" value="TRACE" />
           <param name="Target" value="System.out"/>
           <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="[%d] %c{1} - %m%n" />
           </layout>
         </appender>
    <category name="fr.edf.nectar">
            <appender-ref ref="NectarmotrServer"/>
            <appender-ref ref="NectarmotrServerDev"/>
            <appender-ref ref="console"/>
    </category>
    <category name="fr.edf.nectar.interfaces.motr.imports.mocutil">
            <appender-ref ref="mocutilImport"/>
    </category>

     <root>
        <priority value="ALL"/>
     </root>

JBOSS (я удалил прокомментированные приложения)

   <!-- ======================= -->
   <!-- Setup the Root category -->
   <!-- ======================= -->
   <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/server.log"/>
      <param name="Append" value="true"/>
      <!-- In AS 5.0.x the server log threshold was set by a system
           property. In 5.1 and later we are instead using the system
           property to set the priority on the root logger (see <root/> below)
      <param name="Threshold" value="${jboss.server.log.threshold}"/>
      -->

      <!-- Rollover at midnight each day -->
      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

      <!-- Rollover at the top of each hour
      <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
      -->

      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] (Thread) Message\n -->
         <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>

         <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
         <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
          -->
      </layout>
   </appender>
   <!-- ============================== -->
   <!-- Append messages to the console -->
   <!-- ============================== -->

   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="Target" value="System.out"/>
      <param name="Threshold" value="INFO"/>

      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>

   <root>
      <!--
         Set the root logger priority via a system property. Note this is parsed by log4j,
         so the full JBoss system property format is not supported; e.g.
         setting a default via ${jboss.server.log.threshold:WARN} will not work.
       -->
      <priority value="${jboss.server.log.threshold}"/>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
   </root>

Ответы [ 2 ]

3 голосов
/ 11 июня 2012

Нет проблем с несколькими приложениями, работающими на одном компьютере и использующими средства Log4j. Вопрос в том, где находится файл конфигурации Log4j на обоих серверах? где Log4j создает файлы журнала на обоих серверах? Какие приложения вы используете? Любая общая черта может вызвать проблемы. Попробуйте изолировать оба сервера с помощью отдельных файлов конфигурации, файлов журналов, сгенерированных в разных папках, и на обоих серверах, имеющих свою собственную копию jar Log4j.

Показанная ошибка странна, так как относится к сокетам. Log4j использует какие-либо дополнения, которые полагаются на сокеты? Любой инструмент с графическим интерфейсом для мониторинга журнала, как бензопила?

Предоставьте больше информации о Log4j, установленном на обоих серверах.

1 голос
/ 14 июня 2012

Вот что произошло (спасибо Дэвиду Оливану Убието за помощь):

На сервере Java мы используем Php / Java мост , глядя на его класс, который я нашел:

Util.Logger()
      Use chainsaw, if available or a default logger.

Ссылка на Дэвида Бензопилу может быть проблемой, и это происходит потому, что она использует порт 4445, который совпадает с сервисом JBoss invoker, type=pooled ( Source ).

Итак, я думаю, что при запуске сервера библиотека мостов пытается подключиться к 4445, чтобы проверить наличие бензопилы. Он обнаруживает что-то и решает использовать 4445 в качестве порта ведения журнала, что приводит к отсутствию журнала для Java, в то время как JBoss получает странные сообщения на 4445 и выдает исключение.

Первый запуск Java приведет к тому, что lib будет использовать мою конфигурацию Log4j, а JBoss будет работать как положено.

Чтобы исправить все, что я изменил .../jboss-5.1.0.GA/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml, как это:

...
        <!-- Pooled invoker -->
        <bean class="org.jboss.services.binding.ServiceBindingMetadata">
           <property name="serviceName">jboss:service=invoker,type=pooled</property>
           <property name="port">[PORT OTHER THAN 4445]</property>
           <property name="description">Socket for the legacy Pooled invoker</property>
        </bean>

...
...