LOG4J冲突JBOSS&;Java程序
我已经从一个使用log4j(RollingFile和Console appender)的jar启动了一个java服务器。独自一人:没问题,它可以工作。 我有一个使用log4j(默认安装)的JBoss服务器。当它单独运行时,一切正常 当我首先启动Java服务器和JBoss时,也没有问题 但是,当首先启动JBoss,然后启动java服务器时,最后一个服务器不会记录任何内容,JBoss向我发送以下消息: 错误[ServerThread]未能初始化LOG4J冲突JBOSS&;Java程序,java,jboss,log4j,broken-pipe,Java,Jboss,Log4j,Broken Pipe,我已经从一个使用log4j(RollingFile和Console appender)的jar启动了一个java服务器。独自一人:没问题,它可以工作。 我有一个使用log4j(默认安装)的JBoss服务器。当它单独运行时,一切正常 当我首先启动Java服务器和JBoss时,也没有问题 但是,当首先启动JBoss,然后启动java服务器时,最后一个服务器不会记录任何内容,JBoss向我发送以下消息: 错误[ServerThread]未能初始化 java.io.EOFException
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
java.io.EOFException
在java.io.ObjectInputStream$PeekInputStream.readFully处(ObjectInputStream.java:2297)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2766)
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797)
位于java.io.ObjectInputStream。(ObjectInputStream.java:297)
位于org.jboss.invocation.pooled.interfaces.OptimizedObjectInputStream。(OptimizedObjectInputStream.java:147)
位于org.jboss.invocation.poold.server.ServerThread.dorun(ServerThread.java:265)
位于org.jboss.invocation.pooled.server.ServerThread.run(ServerThread.java:156)
log4j:警告检测到连接问题:java.net.SocketException:管道断裂
使用LOG4J的两台服务器之间是否存在可能的冲突?我在网上什么也没找到
谢谢
附录
- JBoss和Java服务器位于不同的目录中
- JBoss和Java服务器不共享任何端口(8080/8433-->JBoss和20400-->Java)
- JBoss和Java服务器在自己的库文件夹中有自己的log4jxxxx.jar
- Javalog4j版本:Log4j-1.2.16.jar(我也试过1.2.17)
- JBoss版本:JBoss-5.1.0.GA
- 两者都写在不同的文件中
<!-- 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(我删除了带注释的附加器)
在同一台机器上运行多个应用程序并使用Log4j设施没有问题。问题是,两台服务器中的Log4j配置文件在哪里?Log4j在哪里生成两台服务器中的日志文件?你用的是什么appender?任何共同点都可能导致问题。尝试使用单独的配置文件、在不同文件夹中生成的日志文件以及拥有自己的log4jjar副本的两台服务器来隔离这两台服务器 显示的错误很奇怪,因为它涉及套接字。Log4j使用任何依赖于套接字的appender?有没有像链锯一样的监控日志的GUI工具
提供有关两台服务器中安装的Log4j的更多信息。在同一台机器上运行多个应用程序并使用Log4j设施没有问题。问题是,两台服务器中的Log4j配置文件在哪里?Log4j在哪里生成两台服务器中的日志文件?你用的是什么appender?任何共同点都可能导致问题。尝试使用单独的配置文件、在不同文件夹中生成的日志文件以及拥有自己的log4jjar副本的两台服务器来隔离这两台服务器 显示的错误很奇怪,因为它涉及套接字。Log4j使用任何依赖于套接字的appender?有没有像链锯一样的监控日志的GUI工具 提供有关两台服务器中安装的Log4j的更多信息。以下是发生的情况(感谢David Olván Ubieto的帮助): 在Java服务器中,我们使用的是,查看我发现的类:
Util.Logger()
Use chainsaw, if available or a default logger.
引用David Chainsaw可能会有问题,因为它使用端口4445
,这与JBossinvoker相同,type=pooled
service()
因此,我认为,启动服务器时,桥接库会尝试连接到4445
,以查看是否存在链锯。它检测到一些东西并决定使用4445
作为日志端口,导致Java没有日志,同时JBoss在4445
上接收到奇怪的消息并抛出异常
首先启动Java,将导致使用我的Log4j配置和JBoss的lib按预期工作
要更正我修改的所有内容,../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>
...
。。。
jboss:service=invoker,type=pooled
[除4445以外的端口]
旧池调用程序的套接字
...
以下是发生的事情(感谢大卫·奥利文·乌比托的帮助):
在Java服务器中,我们使用的是,查看我发现的类:
Util.Logger()
Use chainsaw, if available or a default logger.
引用David Chainsaw可能会有问题,因为它使用端口4445
,这与JBossinvoker相同,type=pooled
service()
因此,我认为,启动服务器时,桥接库会尝试连接到4445
,以查看是否存在链锯。它检测到一些东西并决定使用4445
作为日志端口,导致Java没有日志,同时JBoss在4445上接收到奇怪的消息<