2016-06-29 1 views
2

새로운 appletender와 함께 log4j2를 사용하려고하지만 조금 재수가 있습니다. 여기 Log4j2 소켓 Appender "connect java.net.ConnectException : Connection refused : connect"

<?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> 

내 자바 코드 : 여기 내 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에 대한 몇 가지 게시물을 보았습니다. 여기가 필요합니까? 지금은 실제로 메시지를받지 않고 메시지를 보내려합니다. 또한 Syslog 어댑터와 유사한 문제가 발생합니다.

+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하는 아이 어떤 로거에 의해 기록 된 모든 로그 이벤트.

희망이 있습니다.

관련 문제