在集群环境中聚合 Jboss 日志的正确方法是什么?

What's the correct way to aggregate Jboss logs in a clustered environment?

我们使用 Jboss 7.4.0 和两个节点,每个节点都有自己的滚动文件附加程序。我们想要做的是将这两个输出重定向到一个唯一的文件中,"outside" 两个 Jboss 节点。我尝试将 SocketAppenders 与手动启动的 Log4J 服务器一起使用,但它不起作用...

<custom-handler name="SOCKET" class="org.apache.log4j.net.SocketAppender" module="org.apache.log4j">
  <level name="DEBUG"/>
  <formatter>
     <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p %X{user} %X{app} [%C:%M:%L] (%t) %s%E%n"/>
  </formatter>
  <properties>
     <property name="Port" value="4712"/>
     <property name="RemoteHost" value="127.0.0.1"/>
  </properties>

log4j 服务器中唯一的东西是:

[2015-04-01 10:31:24,969] [main] [Listening on port 4712]
[2015-04-01 10:31:24,981] [main] [Waiting to accept a new client.]

我读到 Jboss 7+ 中不再存在 SocketAppender,但老实说,Jboss 文档充其量是不完整、缺失或不正确的。

那么,在不重新发明轮子的情况下,正确(或最佳)的方法是什么? 我们应该使用异步滚动文件附加程序吗? 还有其他选择吗?

按照这些步骤正确使用它,这可能会解决您的问题..

1>首先创建log4j-server.properties

log4j.rootLogger=DEBUG, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logfile.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n

2> 现在 运行 在接收端执行以下命令

java -classpath log4j.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties

现在它将侦听端口 4712 并将日志存储在您在 log4j-server.properties 文件

中定义的 logfile.log

3>在 log4j.xml 文件中添加以下附加程序以将日志发送到具有指定端口的服务器。

<custom-handler name="SOCKET"  class="org.apache.log4j.net.SocketAppender" module="org.apache.log4j">
<level name="DEBUG"/>
<properties>
  <property name="Port" value="4712"/>
  <property name="RemoteHost" value="127.0.0.1"/>
</properties>

不要在此配置中指定任何格式化程序。 并且不要忘记在 log4j.xml

root-logger 中添加 SOCKET