2017-09-20 11 views
0

저는 log4j 프레임 워크에서 초보자입니다. 튜토리얼을 통해 "로거가 네임 스페이스 계층 구조에 저장된다"고 말했습니다.
로거의 객체 인스턴스화와 관련이 있습니까?
그리고 logger.getLogger (App.class)는 실제로 무엇을합니까? App.class에 대한 별도의 로거 인스턴스를 생성합니까?어떤 것도 설명 할 수 있습니까? "로거가 네임 스페이스 계층에 저장됩니다"라는 의미는 무엇입니까?

답변

0

당신이 4 로거 "com.foo.apple", "com.foo.juice", "com.bar.tomato"를 작성하는 경우, "com.bar.potato는"당신은 할 것 계층 구조와 같은 :

com 
    .foo 
      .apple 
      .juice 
    .bar 
      .tomato 
      .potato 

로거 구성시 재생됩니다. 예를 들어 LogLevel - "com"노드에 대해 DEBUG를 설정하고 "com.foo"에 대해 WARN을 설정하고 "com.foo.juice"에 대해 ERROR를 설정할 수 있습니다. Logger "com.foo.apple"은 WARN 레벨이고, 로거 "com.bar", "com.bar.tomato", "com.bar.potato"는이 경우 DEBUG 레벨입니다.

+0

XXX 이상, 다른 질문이 있습니다. Logger log = Logger.getLogger (MyApp.class)를 실행하면 MyApp.class에 seprate logger가 생성됩니다. 참고 : MyApp는 com.for 패키지 – Prashank

+0

에 있습니다. 내부적으로 대부분의 로깅 프레임 워크는 로거를 해시 테이블에 저장하므로 이전에 Logger.getLogger (MyApp.class)를 호출하지 않으면 새 인스턴스 로거가 만들어지며, 그렇지 않으면 이미 만들어진 것만 반환됩니다 나무꾼. –

+0

com.bar 패키지에 20 개의 클래스가 있다면. com.bar 로깅 수준 아래에 20 개의 로거 인스턴스가 있습니다. com.bar의 로깅 수준을 info로 설정하면 정보 메시지 만 com.bar에 표시됩니다. 내 밑에 서있는거야? 내가 잘못 이해하면 용서해주십시오. – Prashank

0

Logger 객체는 모든 메시지를 기록하는 주 객체입니다. 로거 객체는 로깅 메시지를 캡슐화하고 대상 또는 서식에 대한 정보를 가지고 있지 않습니다.

app의 특정 인스턴스 내에서 작동하는 Logger 객체는 PARENT-CHILD 계층 구조를 따릅니다. 루트 로거가 존재하는 계층 구조의 맨 위에

enter image description here

. 이 루트 로거는 사용자 지정 로거 계층의 범위 밖에 있습니다. 다른 모든 어플리케이션 별 로거 오브젝트는 루트 로거에 대한 하위 오브젝트입니다. 로거의이 상위 - 하위 관계는 동일한 애플리케이션 내에서 작동하는 로거의 종속성을 나타냅니다. 하위 로거는 상위 로거에서 등록 정보를 상속 할 수 있습니다.

+0

com.bar 패키지에 20 개의 클래스가있는 경우. com.bar 로깅 수준 아래에 20 개의 로거 인스턴스가 있습니다. com.bar의 로깅 수준을 info로 설정하면 정보 메시지 만 com.bar에 표시됩니다. 내 밑에 서있는거야? 내가 잘못 이해하면 용서해주십시오. – Prashank

+0

@Prashank 귀하의 이해가 정확합니다. 하위 로거는 부모로부터 다음 속성을 상속받습니다. A) 수준 : 하위 로거에 명시 적 트리 수준이 지정되어 있지 않으면 가장 가까운 부모 수준을 사용합니다.B) Appender : 로거에 첨부 된 appender가없는 경우, child logger는 가장 가까운 parent logger의 appender를 사용합니다. C) ResourceBundle : 로깅 메시지의 현지화에 사용되는 키 - 값 패턴 속성 파일입니다. 아이 로거는 친 로거에 관련 지을 수 있었던 ResourceBundle를 상속합니다. – Alex

+0

새로운 Logger 인스턴스가 생성되면 LogManager는 이름 공간을 키로 사용하여 이름 공간 저장소에 인스턴스를 저장합니다. 응용 프로그램이 실행되는 동안 동일한 Logger 인스턴스를 다시 만들려고하면 기존 인스턴스가 반환됩니다. – Alex