그래서 내가 두 클래스 LogSender이 내 구성 파일 또는 log4j2.properties 파일추출 로그 LOGEVENT 개체를 통해 SocketAppender 보내
#Socket Appender
appender.socket.type=Socket
appender.socket.name=Socket_Appender
appender.socket.host=10.176.250.5
appender.socket.port=9000
appender.socket.layout.type=SerializedLayout
appender.socket.connectTimeoutMillis=2000
appender.socket.reconnectionDelayMillis=1000
appender.socket.protocol=TCP
#Loggers
logger.socket.name=atom
logger.socket.level=debug
logger.socket.appenderRefs=socket
logger.socket.appenderRef.socket.ref=Socket_Appender
다음과 LogListener
LogSender
그것의 작업 SocketAppender를 통해 로그를 보내는 것입니다.
Stream을 통해 전송되는 내용은 LogEvent 객체입니다.
public class LogSender {
public static final Logger LOG = LogManager.getLogger("atom");
public static void main(String[] args) {
LOG.trace("Error 1");
LOG.debug("Error 2");
LOG.info("Error 3");
LOG.warn("Error 4");
LOG.error("Error 5");
LOG.fatal("Error 6");
}
}
LogListener은
이것은 스트림을 통해 전송 된 LOGEVENT 개체를받을 예정이다. LogListener는 ObjectInputStream에를 사용하고
LogEvent event = null;
private Socket socket1 = null;
private ServerSocket ss = null;
PrintWriter sspw=null;
ObjectInputStream objectInputStream = null;
try {
//Creating Socket and making it listen to a specific port, receiving through streams.
//Servers socket creation and waiting
ss = new ServerSocket(9000);
socket1 = ss.accept();
objectInputStream = new ObjectInputStream(new BufferedInputStream(socket1.getInputStream()));
event = (LogEvent) objectInputStream.readObject();
System.out.println(event.getLoggerName());
System.out.println(event.getLevel());
System.out.println(event.getMessage().getFormattedMessage());
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
출력
원자
DEBUG
오류 2
OUTP을 절약 ut는 예상대로 Logger의 이름입니다. 즉, LogEvent 객체를 수신하고 로거 정보를 추출 할 수 있다는 의미입니다. 또한 실제 로그 메시지를받을 수 있지만 수준 팝업 중 하나, 즉 디버그 수준 만 수신 할 수 있습니다.
다른 모든 수준도 필요합니다. 내가 어떻게하면 좋을까?
저는 Log4j2에 매우 익숙합니다. 나는 이해하기 위해 뭔가를 놓친 것처럼 느낍니다.
그래서, 네 일했다,하지만 난 방법을 이해하지 않습니다. –
내가 이해가 안되는 EOFException을 얻는다. –
위의 코드에서이 예외가 발생하면 다른 쪽 (로그를 보내는 앱)이 연결을 종료했음을 의미해야한다. 두 당사자 사이). 나는 당신이 다른 루프 안에이 전체 코드를 넣으면 EOFException의 경우에 자동으로/주기적으로 다시 연결할 수 있다고 생각한다. – xav