2016-06-29 74 views
2

私はソケットアペンダーで新しいlog4j2を使用しようとしていますが、私は少し不運です。ここで Log4j2ソケットアペンダー "connect java.net.ConnectException:接続が拒否されました:接続"

<?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コードです: はここに私のXML設定ファイルである

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についていくつかの記事を見ましたが、それはここに必要ですか? メッセージを送信するだけで、実際にメッセージを受け取ることはありません。 さらに、シスログアダプタでも同様の問題が発生しています。

+0

ポート9600で何か聞いていますか? – Fildor

+0

@Fildor、いいえ、それを送るために何か聞く必要がありますか? UDPを使用するSyslogまたはSocketAppenderにも同じことが適用されますか? –

+0

UDPはコネクションレスで信頼性がありません。だから、誰かが耳を傾けるならば、世話をしなくても、ただネットに叫ぶことができます。しかし、TCPは何かが送信された場合でもそれが受信されていることを保証します。 – Fildor

答えて

0

このクライアントには、イベントをソケットアペンダーに記録するサーバー側が必要です。 お使いのサーバ側のようなものになります。

ここ
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する子である任意のロガーによって書かれたすべてのログ・イベントは、サーバーが実行場所をコンソールに追加されます。

希望します。

関連する問題