로깅 구성 요소를 분산 시스템에 추가하려고합니다. 현재 소스 코드의 연결을 피하기 위해 AspectJ
으로 작성되었습니다. 소켓 appender를 사용하여 로그를 보내지 만 더 효과적인 것을 시도하고 싶습니다.분산 시스템에서 어떤 Appender를 사용해야합니까? 어떻게 구성합니까?
JMSAppender
과 AsyncAppender
을 사용해야한다고 들었지만 구성에 실패했습니다. 로그를 수집하여 데이터베이스와 GUI에 전달하는 Receiver
을 생성해야합니까 (ChainSaw
을 사용합니까)?
나는 turorial1과 tutorial2을 따르려고했지만 충분히 명확하지 않습니다.
편집 : 작은 데모에서
나는 내가 소켓이 appender를 사용하여 요청 (3 개 구성 요소의 시뮬레이션)
[2012-08-08 15:40:28,957] [request1344433228957] [Component_A] [start]
[2012-08-08 15:40:32,050] [request1344433228957] [Component_B] [start]
[2012-08-08 15:40:32,113] [request1344433228957] [Component_C] [start]
[2012-08-08 15:40:32,113] [request1344433228957] [Component_C] [end - throwing]
[2012-08-08 15:40:32,144] [request1344433228957] [Component_B] [end]
[2012-08-08 15:40:32,175] [request1344433228957] [Component_A] [end]
6 로그를 보낼 준비했습니다. 그래서 내 log4j.properties은 다음과 같습니다
log4j.rootLogger=DEBUG, server
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=4712
log4j.appender.server.RemoteHost=localhost
log4j.appender.server.ReconnectionDelay=1000
그래서 난 구성
>java -classpath log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties
을 실행
log4j.rootLogger=DEBUG, CA, FA
#
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=[%d] [%t] [%c] [%m]%n
#
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=report.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=[%d] [%t] [%c] [%m]%n
은 그 때 나는 전기 톱에 파일에서 내 로그를 보내
그것은 절대적으로 기본이지만, 더 잘하는 법을 배우고 싶습니다. 우선, 로그를 비동기 적으로 보내고 싶습니다. 그런 다음 매우 간단한 수신기를 만드십시오. 로그를 파일에 전달할 수 있습니다.
나는 위에 나열된 자습서를 따르려고했지만 실패했습니다. 질문은 다음과 같습니다. 예제 구성을 제공 할 수 있습니까? Receiver.java
및 log4.properties
파일의 예는 무엇입니까?
시스템 이름이 아닌 요청 유형별로 로그를 다른 파일로 분할해야합니다. 가능한가? – alicjasalamon
거의 실시간으로 처리해야합니까, 아니면 밤에 처리 할 수 있습니까? 요청 당 파일은 매우 비효율적 일 수 있습니다. 시간에 민감한 무언가를하고 있다면 log4j를 사용하지 않을 것입니다. ;) –
내 아이디어는 : 메시지가 JMS appender에 의해 비동기 적으로'Receiver'로 보내집니다. 'Receiver'는 가장 긴 요청이나 50 개 그룹 중 하나의 요청을 선택한 다음 ChainSaw 및 데이터베이스로 전달합니다. 이 상황에서 log4j를 사용해야합니까? ** 쉬운 ** 해결책을 찾고 있습니다 – alicjasalamon