2012-03-14 4 views
3

내 Java 로그 항목을 그룹화하여보다 쉽게 ​​검색 할 수 있습니다. 나는 다음 로그 레코드가 의미 :자바 로그 항목을 그룹화하는 방법은 무엇입니까?

14-Mar-2012 14:29:07 com.acme.service.AcmeService log 
INFO: Start ACME operation 
14-Mar-2012 14:29:07 com.acme.service.AcmeService log 
INFO: step 1 - do something 
... 
14-Mar-2012 14:29:07 com.acme.service.AcmeService log 
INFO: End ACME operation 

이러한 워크 플로의 단계는 이러한 기록이 서로에 속하는 (예를 들어, 나는 웹 서비스의 과정을 추적하고 싶은이). 웹 서비스 요청의 로그를 쉽게 찾을 수 있도록 이러한 레코드를 함께 보관할 수있는 좋은 디자인 패턴이 있습니까? (예 : 모든 로그 항목의 시작 부분에 ID를 넣으려면)? 자동으로 그룹화하여 이러한 로그를 표시 할 수있는 도구가 있습니까? 같은 log4j chainsaw하지만이 ID로 함께 그룹화? 감사합니다.

답변

2

레벨을 확장하고 나만의 맞춤 레벨을 추가하지 않는 이유는 무엇입니까? 모든 웹 서비스 로깅은 해당 수준에서 수행 할 수 있습니다.

당신이 당신의 자신의 수준이되면 당신은 그것이 당신에 관계없이 로깅 API 그것을 만드는 데 사용 된 무엇을, 일반 텍스트 로그 파일을 구문 분석하기 위해 전기 톱을 사용하여 다른 파일 등

+0

안녕하세요 bluesman, 감사합니다! 나는 Log 클래스를 확장 한 적이 없다. 이것으로 내 로그 파일을 망칠 수 없을까? 그룹화 된 로그를 멋지게 표시 할 수있는 GUI 도구가 있는지 생각하십니까? 예를 들면 다음과 같습니다 : INFO AcmeService 384d63gd33 + (이상한 숫자가 식별자가되기를 원함) 그리고 기호를 클릭하면 주어진 요청에 속한 모든 로그를 얻을 수 있습니다. – Viktor

+0

로그 파일을 망칠 염려가 없습니다. 로그를 그룹화하는 GUI 도구에 대해서는 잘 모르겠지만 로그를 통해 특정 항목을 검색하여 함께 표시하려면 grep (Linux 환경 또는 Windows에서 git bash 사용)을 사용할 수 있습니다. – bluesman

+0

다시 한번 감사드립니다! 내 문제는 더 많은 행 (예 : SOAP 요청)으로 구성된 데이터를 로깅해야하고이 데이터는 로그 항목에 속해 있으므로 함께 처리하고 표시해야합니다 ...이 작업을 수행하는 방법을 알지 못합니다. grep. 그리고 필자는 리눅스 전문가가 아니기 때문에 어느 누구도 알지 못합니다. :) – Viktor

0

스프링 테크놀로지에서 작업하는 경우 채널에 로그를 수신하고 라우터를 사용하여 유형별로 분리하고 아웃 바운드 어댑터를 사용하여 데이터베이스에 저장하는 스프링 통합 모듈을 쉽게 구성 할 수 있습니다. 상자에 많은 배선이있어서 최소한의 코딩 만하면됩니다.

http://www.springsource.org/spring-integration#documentation

+0

답변 주셔서 감사합니다.하지만 유감스럽게도 봄 환경에서 작업하지는 않습니다. – Viktor

4

당신은 당신의 웹 애플리케이션에서 세션을 사용하고 있습니까? 그렇다면 세션 ID를 사용하여 요청을 구분할 수 있습니다.

죄송합니다. 귀하의 사례를 살펴보면 java.util.Logging을 사용하고 있다고 생각합니다. 아래는 log4j에서만 작동합니다. 나는 지금 알고 싶어하는 누군가가 수정을했는지를 궁금해한다. 두 가지 경험을 통해 log4j가 사용하고 구성하는 것이 훨씬 쉽다는 것을 알게되었습니다.

의 Log4j 솔루션

패스 필터를 통해 모든 요청하고 NDC.push(id)를 사용합니다. 그런 다음 패턴에 %x을 사용하여 파일에 출력하십시오.

+0

해답을 가져 주셔서 감사합니다! 불행하게도 우리는 java.util.Logging ...을 사용해야합니다 :(당신은이 그룹화 된 로그를 멋지게 표시 할 수있는 GUI 도구가 있는지 생각해보십시오. 예 : INFO AcmeService 384d63gd33 + (이상한 숫자가 식별자가되기를 원합니다) 그리고 기호를 클릭하면 + 우리는 주어진 요청에 속한 모든 로그를 얻을 것입니다. 아니면 너무 이상적입니까? :) – Viktor

+0

그렇게 할 수있는 도구가있을 수도 있지만, 미안합니다. j.u.l의 식별자에 또 다른 균열이 있어야합니다. 나 자신이 어떤 점에서 어떤 성공이라면 나는 다시보고 할 것이다. – chooban

+0

고맙습니다.ThreadLocal을 사용하여 NDC.push()와 비슷한 솔루션을 구현할 수 있도록 정보를 로그 헤더에 넣을 생각입니다. – Viktor

0

로깅을 포함하여 기록하는 방법을 사용자 정의 할 수 있습니다. Welcome 탭에서 사용 가능한 receiver config xml 예제의 LogFilePatternReceiver 예를 참조하십시오.

예제에서 세션을 로그 파일 출력에 포함하면 세션을 속성으로 추가 한 다음 해당 세션을 사용하여 색을 지정/정렬하고 필터링 할 수 있습니다. 또한 세션 ID를 '로거'로 사용하고 개인 로거에 집중할 수있는 로거 트리의 기능을 활용하여 '그룹화'동작을 제공 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! 내 문제는 레코드로 로그 항목 (및 로그 파일의 행)을 처리 할 수 ​​있도록 여러 줄의 로그 항목이 있다는 것입니다. 나는 명령 합의가 나를 적응시킬 것이라고 생각한다. java.util 로깅을 사용하고 있습니다. – Viktor

+0

이것은 java.util.logging의 일반적인 레이아웃처럼 보입니다. LogFilePatternReceiver를 업데이트하여 로그 형식의 여러 줄을 지원합니다. – Scott

관련 문제