여러 컴퓨터 및 여러 웹 응용 프로그램에서 로그 이벤트를 수신하도록 소켓 서버를 설정했습니다. 어떻게하면 각 이벤트를 보내는 클라이언트의 이름을 검색 할 수 있습니까? 아니면이 프레임 워크에서 로그를 분리하는 모범 사례에 전적으로 근거하지 않습니까?소켓 서버 - Log4j2.xml에서 클라이언트 이름을 얻으려면 어떻게해야합니까?
예상 결과 : 따라 해당 파일에 인바운드 로그 이벤트 및 경로를의 클라이언트 이름을 식별 할 수있는 Log4j2 라우팅 펜더와 소켓 서버입니다.
검색 결과 : 라우터가 없으면 모든 로그 이벤트가 모든 파일에 중복 기록됩니다. 라우터에서는 정확한 조회를 모르기 때문에 어떤 파일에도 이벤트가 기록되지 않습니다.
하나의 클라이언트의 설정의
수정 된 버전 :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<Appenders>
<Socket
name="Socket"
host="log4j-srv"
port="1234"
>
<SerializedLayout />
</Socket>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="Socket"/>
</Root>
</Loggers>
</Configuration>
그리고 서버 : SocketAppender는 보낸 사람의 호스트 이름을 포함하지 않는 기본 구성에서
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<Appenders>
<Routing name="Routing">
<Routes pattern="???">
<Route>
<RollingRandomAccessFile name="Default"
fileName="example1.log"
example-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${hostName} %d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>
</Route>
<Route key="client1">
<RollingRandomAccessFile name="Client1"
fileName="otherexample.log"
filePattern="otherexample-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${hostName} %d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Routing"/>
</Root>
</Loggers>
</Configuration>
Defne '클라이언트 이름'. – EJP
@EJP는 발신자의 호스트 이름과 같습니다. – Arc