我从一个使用log4j(RollingFile和Console appender)的jar启动了一个java服务器。独自:没有问题。 我有一个使用log4j的JBoss服务器(默认安装)。单独运行时一切都很好。
当我首先启动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的两台服务器之间是否存在冲突?我没有在网上找到任何东西。
由于
附录
以下是配置文件:(基本上只有console&amp; appender文件)
爪哇
<!-- 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 (我删除了已注释的appenders)
<!-- ======================= -->
<!-- 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>
答案 0 :(得分:3)
在同一台计算机上运行多个应用程序并使用Log4j工具没有问题。问题是,两台服务器中的Log4j配置文件位于何处? Log4j在哪两个服务器中生成日志文件?你使用什么appender?任何共同点都可能导致问题。尝试使用单独的配置文件隔离两个服务器,在不同文件夹中生成日志文件,并且两个服务器都有自己的Log4j jar副本。
显示的错误与套接字有关。 Log4j使用任何依赖套接字的appender?用于监控日志的任何GUI工具,如Chainsaw?
提供有关两台服务器中安装的Log4j的更多信息。
答案 1 :(得分:1)
以下是发生的事情(感谢DavidOlivánUbieto的帮助):
在Java服务器中,我们正在使用Php/Java bridge,查看我发现的类:
Util.Logger()
Use chainsaw, if available or a default logger.
参考David Chainsaw可能会出现问题,因为它使用的端口4445
与JBoss invoker, type=pooled
服务(Source)相同。
所以我认为发生服务器的情况是,桥库尝试连接到4445
以查看是否存在电锯。它检测到某些内容并决定使用4445
作为日志记录端口导致没有Java日志,同时JBoss在4445
上收到奇怪的消息并抛出异常。
首先启动Java,将使用我的Log4j配置生成lib,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>
...