簡體   English   中英

Log4j2 Socket Appender“連接java.net.ConnectException:連接被拒絕:connect”

[英]Log4j2 Socket Appender “connect java.net.ConnectException: Connection refused: connect”

我正在嘗試將新的log4j2與Socket Appender一起使用,但我有點不走運。 這是我的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 Adapter類似的問題。

您需要此客戶端的服務器端,將事件記錄到套接字附加程序。 您的服務器端看起來像:

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的子級記錄器編寫的日志事件都將附加到服務器運行的控制台。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM