(2) 로그 단계와 계승 관계

3788 단어 logbacklogback 분석

1. logger의 명칭과 등급


로그 단계의 등급 관계를 말하기 전에logger의 이름을 말해야 한다. 이 두 가지는 밀접한 관련이 있다.

LoggerContext


logger는 LoggerContext 대상에 의해 나무 모양의 등급 구조로 조직되었다.LoggerContext 인터페이스를 실현했다면 이 상하문 대상을 logback의logger공장으로 이해할 수 있다.org.slf4j.ILoggerFactory에서 사용
this.loggerCache = new ConcurrentHashMap<String, >Logger>();

logger 캐시하기;

logger 이름


logger는 이 공장에서 이름으로 구분된다. logger의 이름은 바로 그의 키이다. 우리는 보통 하나의 String 대상이나 Class 대상을 전송해서 logger를 얻을 수 있다. 실제로 팩토리는 Class 대상을 가져올 때 Class의 LoggerContext 방법으로 클래스의 전체 경로 이름을 얻은 다음에 getName() 방법으로 캐시에서 Logger를 얻는다.위에서 보듯이 logger의 이름은 대소문자가 민감하다. (루트 logger를 가져오는 것을 제외한다.)

logger 계층 구조


logger의 등급 관계도 이름을 근거로 조직된 것이다.그 관건은 바로 이름 중의 것이다.기호.쓰다"logger 이름을 잘라, 마지막".이전 문자열은 이 logger의 아버지 logger 이름입니다.예를 들어 logger의 이름은 getLogger(String name)이다.그의 아버지logger의 이름은 com.test.loggerdes.a이고 com.test.loggerdes의 아버지logger의 이름은 com.test.loggerdes이다.이런 식으로 추론하면, 그 logger는 com.test 라는 logger입니까? 물론 아닙니다.com를 초기화할 때 이 코드를 발견할 수 있습니다.
this.root = new Logger(Logger.ROOT_LOGGER_NAME, null, this);
...
loggerCache.put(Logger.ROOT_LOGGER_NAME, root);

즉, 루트 logger는 LoggerContext로 명명된 logger이고 Logger.ROOT_LOGGER_NAME의 값은 문자열Logger.ROOT_LOGGER_NAME이다.연구 코드를 보면 경로가 1급의logger만 있고 그의 아버지logger는 모두 루트logger라는 것을 알 수 있다.
이 예에서 언급된 logger는 우리가 뿌리 logger에서 배열한 것이 바로 아래의 조형이다. 그 중에서 윗줄은 다음 줄의 아버지 logger이다.
ROOT com com.test com.test.loggerdes com.test.loggerdes.a

2. 로그 level과 등급 계승


1절에 그렇게 많은 것을 말했는데 도대체 무슨 소용이 있겠는가?물론 중요합니다. 명칭 등급은 로그 설정과 행위와 직접적인 관계가 있습니다.

로그 level


로그 레벨은 로그의 중요성을 구분하는 데 사용됩니다. 우리는 서로 다른 중요성을 가진 로그를 다른 레벨로 분류합니다. 이로써 서로 다른 중요 레벨의 로그에 대해 서로 다른 관리 전략을 제정할 수 있습니다.logback"ROOT"류는 level을 정의했다.로그 수준은 중요도에 따라
TRACE < DEBUG < INFO < WARN < ERROR

logger 로그 단계 설정 및 계승


logback에서 로그 레벨은 logger에 설정되어 있으며 로그 레벨이 기록된 로그 레벨을 설정합니다.우리가 로그 단계를 설정하지 않았을 때, 시스템은 로그 수를 따라 루트 노드 방향으로 로그 단계를 설정한 가장 가까운 아버지 logger나 선조 logger를 찾을 것입니다.맨 위에 있는 것은 당연히 위에서 언급한 루트 logger이고 루트 logger의 기본 로그 레벨은 debug 레벨입니다.
다음 몇 가지 예는 logger에 로그 레벨과 레벨의 계승을 설정하는 것을 설명하는 데 사용됩니다.
예1: 루트 logger를 level로 설정하거나 설정하지 않음 (루트 기본값은 debug)
logger 이름
level 설정
유효 level
root
debug
debug
x
설정되지 않음
debug
x.y
설정되지 않음
debug
x.y.z
설정되지 않음
debug
예2: 모든 logger가 대응하는 레벨을 설정합니다
logger 이름
level 설정
유효 level
root
debug
debug
x
info
info
x.y
error
error
x.y.z
warn
warn
예3:
logger 이름
level 설정
유효 level
root
debug
debug
x
info
info
x.y
설정되지 않음
info
x.y.z
warn
warn
예4:
logger 이름
level 설정
유효 level
root
debug
debug
x
info
info
x.y
설정되지 않음
info
x.y.z
설정되지 않음
info
위의 몇 가지 예에서 결론을 얻을 수 있다. 하나의logger의 로그 단계는 그의 하위 logger에 의해 계승되고 하위 logger도 단독으로 로그 단계를 설정할 때까지 계승된다.

level에 의한 로그 기록


만약 우리의logger가 설정한 로그 레벨이 debug라면 기본적으로 이logger는 어떤 레벨의 로그를 기록합니까?이 때, 이logger는 모든 로그 레벨이 debug보다 큰 로그, 즉 DEBUG 레벨에서 ERROR 레벨까지의 모든 로그를 기록합니다.
규칙:logger가 로그 레벨을 q로 적용하면 이 logger가 기록할 로그 레벨은 x입니다. 그러면 x>=q입니다.

좋은 웹페이지 즐겨찾기