log4j.properties 파일에서 log4j.rootLogger 속성의 의미는 무엇입니까? 이 속성을 사용하지 않으면 어떻게됩니까?


85

파일 log4j.rootLogger에서 속성 의 중요성은 무엇입니까 log4j.properties? 이 속성을 사용하지 않으면 어떻게됩니까?

:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

이 속성을 ERRORmode로 설정하면 어떻게됩니까 ?

답변:


95

Samudra Gupta는 그의 책 1 에서 다음과 같이 설명합니다 .

Logger객체는 응용 프로그램 개발자가 어떤 메시지를 기록하는 데 사용하는 주된 목적이다. Logger응용 프로그램의 특정 인스턴스 내에서 작용하는 객체는 다음과 부모 - 자식 계층을 .

다음 구성이있는 경우 :

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.logger.com.me.proj2=INFO

로거 계층 구조가 다음과 같이 보일 수 있습니다. 2

나무

Samudra Gupta는 계속해서 다음과 같이 설명합니다.

계층 구조의 맨 위에는 루트 로거가 있습니다. 루트 로거는 우리가 생각 해낼 수있는 사용자 정의 로거 계층의 범위 밖에 존재합니다. 가능한 모든 로거 계층에 대한 루트 로거로 항상 존재하며 네임 스페이스가 없습니다. 다른 모든 응용 프로그램 관련 Logger개체는 루트 로거의 자식 개체입니다. 로거의 상위-하위 관계는 동일한 애플리케이션 내에서 작동하는 로거의 종속성을 나타냅니다. 자식 로거는 부모 로거의 속성을 트리 위로 재귀 적으로 상속 할 수 있습니다. 일반적으로 자식 로거는 부모 로거에서 다음 속성을 상속합니다.

  • Level: 자식 로거에 명시적인 트리 수준이 지정되지 않은 경우 가장 가까운 부모 수준 또는 계층 구조에서 재귀 적으로 찾은 첫 번째 적절한 수준을 사용합니다.
  • Appender: 로거에 첨부 된 어 펜더가없는 경우 하위 로거는 가장 가까운 상위 로거의 어 펜더 또는 트리에서 재귀 적으로 찾은 첫 번째 어 펜더를 사용합니다.
  • ResourceBundle: ResourceBundles로깅 메시지의 현지화에 사용되는 키-값 패턴 속성 파일입니다. 자식 로거는 ResourceBundle부모 로거와 관련된 모든 것을 상속합니다 .

메모

1 Samudra Gupta, Pro Apache Log4j, Second Edition (Berkeley, CA : Apress, 2005), 24-25, ISBN13 : 978-1-59059-499-5

2 Dominic Mitchell, Logging in Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , 2014 년 5 월 26 일에 확인 함.


1
+1은 "가능한 모든 로거 계층에 대해 항상 루트 로거로 존재하며 네임 스페이스가 없습니다."
Azim

2
OP- " 이 속성을 사용하지 않으면 어떻게됩니까? "?? 이 질문에 대한 답은 무엇입니까 ?
hagrawal

4
어 ... 도미닉의 페이지 링크의 배경을보세요. 전혀 읽을 수 없습니다.
MasterJoe

@ testerjoe2-당신 말이 맞아요, 예쁜 이미지는 읽기 어렵게 만듭니다-사람들이 흰색 텍스트와 함께 노란색 배경을 가지고 있던 옛날 html 시대처럼-당신의 눈은 피를 흘리고 싶어합니다!
JGlass

12

대답하려면

이 속성을 사용하지 않으면 어떻게됩니까?

rootLogger를 레벨 및 어 펜더로 설정하지 않으면 경고가 표시됩니다.

예를 들어, 줄을 생략하거나 주석 처리 한 경우 log4j.rootLogger=DEBUG, stdout, 즉 log4j.properties 파일에 rootlogger 만 있고 추가 로거는 포함되어 있지 않다고 가정하면 여기서 루트 로거는 주석 처리됩니다.

#log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

다음과 같은 출력이 표시됩니다.

log4j:WARN No appenders could be found for logger (log4jtests.Log4jHelloWorld).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

7

log4j.rootLogger 속성은 루트 로거에 대한 레벨 (여기서는 DEBUG) 및 Appender (여기서는 A1)를 설정합니다. 이것은 필수가 아닙니다. 루트 로거에는 기본 어 펜더가 첨부되어 있지 않으며 어 펜더없이 존재할 수 있습니다. 따라서 log4j 속성 파일은이 속성을 설정하지 않아도 될 수 있습니다.

루트 로거는 Java의 Object 클래스와 유사한 log4j 계층 구조에서 가장 높은 로거입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.