Log4j2 套接字追加器 "connect java.net.ConnectException: Connection refused: connect"



我正在尝试使用带有套接字appender的新log4j2,但我有点不幸。这是我的XML配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
        <Socket name="socket" host="localhost" port="9600">
            <SerializedLayout />
        </Socket>
      </Appenders>
  <Loggers>
    <Logger name="com.mycorp" level="info" />
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="socket"/>
        </Root>
  </Loggers>
</Configuration>

这是我的Java代码:

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import java.io.*;
import java.sql.SQLException;
import org.apache.logging.log4j.core.net.*;
public class SyslogLogger
{
    private static final Logger LOG = LogManager.getLogger(SyslogLogger.class);
    public static void main (String[] args)throws IOException,SQLException
    {
        LOG.info("commit(). Query {}", "commit(). Query {}");
    }
}

执行我要获得的代码时:

2016-06-29 17:13:42,426 main ERROR Unable to write to stream TCP:127.0.0.1:9600 for appender socket: org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to TCP:127.0.0.1:9600 socket not available
2016-06-29 17:13:42,426 main ERROR An exception occurred processing Appender socket org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to TCP:127.0.0.1:9600 socket not available

我应该明确创建一个TCP套接字吗?还是log4j2为我做?我看到了一些有关Logstash的帖子,这里需要吗?请注意,我只想发送消息,而目前没有实际捕获消息。此外,我还遇到Syslog适配器的类似问题。

您需要该客户端的服务器端,该服务器将事件记录到套接字Appender。您的服务器端看起来像:

public static void main(String args[])
{
    TcpSocketServer server = null;
    try {
        server = new TcpSocketServer(9600,new ObjectInputStreamLogEventBridge());
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    server.run();
}

在这里,TCP插座在9600上打开,只要该服务器运行,就可以继续聆听日志事件。您还需要与此服务器相对应的log4j2配置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyAppServer" packages="">
  <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console
  </Appenders>
  <Loggers>
     <Logger name="com.mycorp" level="info" />
        <Root level="info">
        <AppenderRef ref="Console"/>
        </Root>
  </Loggers>
</Configuration>

现在,所有的日志事件由任何记录器编写的日志事件,即com.mycorp都将附加到服务器运行的位置。

希望它有帮助。

相关内容

最新更新