SLF4J / Logback에서 마커 사용에 대한 모범 사례
우리는 현재 SLF4J + Logback 조합을 사용하고 매우 행복하지만 로깅 클래스는 간단한 클래스 기반 로거를 사용하고 MDC 또는 마커와 같은 멋진 물건을 사용하지 않는 매우 간단합니다.
내가 알고 싶은 것은 어떤 사람이 실제로 기능을 사용하는지와 로깅 / 필터링을 개선하는 데 어떻게 사용하는 커뮤니티입니다.
내가 특별히 어디에, 왜, 어떻게에 관심이 것 하나 개를 사용 [1] 로깅을위한 마커. 배포는 로깅에 시맨틱 다수를 추가하는 매우 깔끔한 기능으로 저를 공격합니다. 예를 들어, 클래스가 여러 가지 문제를 처리 할 수 있지만 작업 / 관심 특정 마커를 사용하여 로그 문을 구별 할 수 있습니다.
로깅에서 마커를 만들고 사용하기위한 모범 사례, 규칙 또는 전략은 무엇입니까?
업데이트 : 나는 내가 정말 후 생각하는 것은 너무하지, 생각 하는 이유 마커를 사용하는 것, 대신에 부분-예를 들어, 공백이나 대시 / 밑줄 / 문장 부호 별명 식별자가 키워드 스타일의 이름을 일반 텍스트를 사용하여 (이름 마커의 좋은 사례가있다), 비즈니스 기능에 따라 이름을 지정하는 "표준 이름"이 풀이됩니다. 내가 알아낼 수있는 질문이지만,이 기능을 체계적으로 사용하고 개발자 팀에 소개 제안 공식화 할 수있는 제안을 제안하는 것이 좋습니다 ...
[1] - 마커 사용 을 묻음 API 사용 방법을 묻지 (정말 간단합니다)-마커를 일관되게 사용하여 방법을 설정하는 방법의 일반적인보다 수준을 참조하고 있습니다.
먼저 @darioo가 말했듯이 :
- MDC는 "엔터티"가 몇 가지 여러 이벤트를 연결하는 데 사용됩니다.
- [마커]는 일반적인 이벤트에서 필터링하려는 "특별한"이벤트에 사용됩니다.
따라서 MDC를 사용하려는 주장. 마커는 "슬라이스"가 아닌 "특별한"이벤트를 필터링하고 필터링합니다. 예를 들어 특정 사용자를 기준으로하지만 예상치 예외를 기준으로 필터링 할 수 있습니다. 이 경우 사용자 MDC 차원과 UnexpectedException Marker를 작성합니다.
그러나 분명히 당신이 생각했던 질문을 다루지 않습니다. "마커를 사용하여 일관되게 로깅을 설정하는 방법의 일반적인 수준을 사용하고 있습니다." 따라서 다음과 같이 다루겠습니다.
MDC는 슬라이싱과 다이 싱 을위한 것 마커는 필터링을 위한 것 입니다. 이 단계에서는 테스트 및 생산 중에 수행 됩니다. 따라서 테스트 / 생산시 로그 데이터를 분할하는 데 유용 할 것으로 예상되는 차원과 필터링 할 때 유용한 차원을 결정해야합니다. 각 차원은 MDC 차원을 갖습니다. 각 사례는 마커를받습니다. 그렇게 간단합니다.
개발자는 여기서 결정을 내릴 필요가 없습니다. 한 사람 또는 팀이 디자인 타임 에 어떤 종류의 슬라이싱, 다이 싱 및 필터링을 지원 해야할지 결정해야합니다. 이 작업을 수행해야 어떤 수행의 상상 분석을 수행 할 수 있습니다.
동일한 사람이나 팀이 명명 규칙을 결정해야합니다. 그것은 전적으로 임의적 입니다. 기쁘고으로 심미적 자기 묘사 적 (가장 중요한) 나중에 추가 할이며 내용과 충돌하지 않을 정도로 구체적인 것을 선택하십시오 . 하이픈 대 밑줄은 매우 까다 롭고 놀란 ESL 직원이 밑줄을 읽는 것이 혼란스럽지 않을 수 있습니다 (적어도 CamelCase와 비교). 동시에, 이것은 필수 키에 도달하는 어색함 때문에 일부 개발자를 성가 시게합니다.
정책을 결정하는 한, 즉 주어진 마커 또는 MDC 차원을 채택하는 경우를 정의하는 것을 의미 합니다 . 이를 엄격하게 (중앙 집중식으로) 유지하지만, 개발자가 차원 및 마커 세트가 현재 작업에 충분하지 고 생각하는 경우를받을 수 있습니다. 치수 및 / 또는 특성을 수정 / 추가하십시오.
정책은 프로젝트이마다 거의 다를 것임을 이해 하십시오 . 모든 프로젝트에 동일한 종류의 로깅 분석이 필요한 것은 아닙니다. 악몽 시나리오를 사용합니다. 그런 다음 해당 시나리오에서 로그를 분석 할 수있는 방법을 상상해. 어떤 메시지가 어떤 존재에 있는지, 어떤 상태가 어느 시점에 있는지, 어떤 상태가 어느 시점에 있는지 추적하기 위해 복잡 할 가능성이 없습니다. 치수 및 마커로 필요한 정보를 인코딩하고 문제가 발생하면 번거 로움을 덜어 비용이 발생합니다.
먼저 MDC.
MDC는 일부 동작과 관련된 하나의 "엔티티"가있는 환경에서 유용합니다. 일반적인 예 : 사용자가 웹 응용 프로그램과 상호 작용합니다. 많은 웹 사용자가 웹 앱을 사용하고 가정 해 보겠습니다. MDC를 사용하면 번거 로움없이 쉽게 추적 할 수 있습니다. 단순화 된 예 :
...[Sandy][abcd] clicked on "change profile"
...[Joe][1234] clicked on "weather reports"
...[Joe][1234] clicked on "Europe"
...[Sandy][abcd] clicked on "logout"
...[Joe][1234] clicked on "logout"
...[Sandy][efgh] logged in
여기서는 사용자 이름과 세션 ID의 두 위치에서 MDC를 사용하고 있습니다. 이런 식으로 한 사용자의 세션을 쉽게에서 모든 작업을 볼 수 있습니다.
둘째, 마커.
마커는 일반적으로 심각한 오류가 모든 경우 관리자에게 이메일을 보안하고 동일한 "특별한"상황에 사용됩니다. 모든 오류가 항상 같은 범주에 존재하는 것은 아닙니다. 일부는 방식으로 처리해야합니다.
또는 사용자가 서비스를 종료하면 일반적으로 INFO 로그로 이동하지만 이와 같은 이벤트를 별도의 로그 파일로 보내려면 해당 인스턴스에 대한 마커를 사용할 수도 있습니다. 사용자의 통계 수집을 위해 더 쉽게 종료됩니다.
경험 법칙 :
- MDC는 "엔터티"가 몇 가지 여러 이벤트를 연결하는 데 사용됩니다.
- 마커는 일반적인 이벤트에서 필터링하려는 "특별한"이벤트에 사용됩니다.
마커를 사용하여 단일 로그 문 을 채색 하거나 표시 할 수 있습니다 . 색상, 즉 마커로 수행하는 작업은 전적으로 귀하에게 달려 있습니다. 그러나 두 가지 가지 패턴이 마커 사용에 공통적 인 의견 (첫 번째 패턴이 두 번째 패턴보다 일반적입니다).
트리거링 : 일부 어 펜더는 특정 마커가있는 경우 작업을 수행하도록 지시 할 수 있습니다. 예를 들어, 로그 수준에 관계없이
SMTPAppender
로깅 이벤트가NOTIFY_ADMIN
마커 로 표시 될 때마다 이메일을 보내도록 구성 할 수 있습니다 . 로그 백 문서에서 마커 기반 트리거 를 참조하세요 . 트리거를 위해 로그 수준과 마커를 결합 할 수도 있습니다.필터링 : 예를 들어 "DB"색상으로 모든 지속성 관련 로그 (다양한 여러 클래스 파일)를 색상 / 표시 할 수 있습니다. 그런 다음 "DB"를 필터링 할 수 있습니다. DB로 표시된 로그 문을 제외하고 로깅을 비활성화합니다. 자세한 내용은 로그 백 문서의 필터 에 대한 장 을 참조하십시오 (MarkerFilter 검색).
부록과 마찬가지로 logstash를 사용하고 json 로깅을 활성화 한 경우 특정 로그 메시지와 연결할 변수를 로깅하기 위해 Marker를 사용할 수 있습니다. 이는 메시지 본문에 포함하는 것보다 일관되고 구문 분석하기 쉽습니다. 사용 사례에 적합하면 매우 유용합니다.
여기에서 세부 사항을보십시오 :
https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event
참고 URL : https://stackoverflow.com/questions/4165558/best-practices-for-using-markers-in-slf4j-logback
'IT' 카테고리의 다른 글
어떤 프로세스가 모든 디스크 IO를 사용하고 있습니까? (0) | 2020.07.22 |
---|---|
리플렉션을 통해 사유 재산을 접근 할 수 있습니까? (0) | 2020.07.22 |
String.valueOf () 대 Object.toString () (0) | 2020.07.22 |
데이터베이스 ID 노출-보안 위험? (0) | 2020.07.22 |
DataFrame의 파티셔닝을 정의하는 방법은 무엇입니까? (0) | 2020.07.22 |