2017-09-20 9 views
1

아래와 같이 여러 로거를 정의했습니다 (com.xyz 및 org.xyz). Log4j2는 첫 번째 로거 정의를 무시하고 두 번째 로거 정의 만로드합니다. 예제에서, org.xyz는로드되지 않습니다.Log4j2 : 여러 로거를 정의하는 방법

아래에서 log4j2 디버그 메시지를 찾으십시오.

DEBUG StatusLogger Processing node for object loggers 
DEBUG StatusLogger Processing node for object logger 
DEBUG StatusLogger Node name is of type STRING 
DEBUG StatusLogger Node level is of type STRING 
DEBUG StatusLogger Node additivity is of type STRING 
DEBUG StatusLogger Processing node for array appender-ref 
DEBUG StatusLogger Processing appender-ref[0] 
DEBUG StatusLogger Returning logger with parent loggers of type logger:class  org.apache.logging.log4j.core.config.LoggerConfig 
DEBUG StatusLogger Processing node for object root 
DEBUG StatusLogger Node level is of type STRING 
DEBUG StatusLogger Processing node for object appender-ref 
DEBUG StatusLogger Node ref is of type STRING 
DEBUG StatusLogger Node level is of type STRING 
DEBUG StatusLogger Returning appender-ref with parent root of type appender-ref:class org.apache.logging.log4j.core.config.AppenderRef 
DEBUG StatusLogger Returning root with parent loggers of type root:class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger 
DEBUG StatusLogger Returning loggers with parent root of type loggers:class org.apache.logging.log4j.core.config.LoggersPlugin 
DEBUG StatusLogger Completed parsing configuration 
DEBUG StatusLogger Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig]. 
DEBUG StatusLogger createLogger(additivity="false", level="DEBUG", name="com.xyz", includeLocation="null", ={Console-Appender}, ={}, Configuration(Default), Filter=null) 
DEBUG StatusLogger Building Plugin[name=appender-ref, class=org.apache.logging.log4j.core.config.AppenderRef]. 
DEBUG StatusLogger createAppenderRef(ref="Console-Appender", level="WARN", Filter=null) 
DEBUG StatusLogger Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. 
DEBUG StatusLogger createLogger(additivity="null", level="WARN", includeLocation="null", ={Console-Appender}, ={}, Configuration(Default), Filter=null) 
DEBUG StatusLogger Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. 
DEBUG StatusLogger createLoggers(={com.xyz, root}) 

구성이 맞습니까?

+0

을의 org.xyz는 loadded되고 com.xyz는 무시됩니다. – user8426833

+0

두 로거가 모두 동일한 'JSON' 키 이름 인'logger'를 사용하고 있기 때문에 그렇습니까? 마지막 항목 만 만들어지고 이전 항목을 덮어 씁니다. 고유 한 이름으로 변경할 수 있습니까? 일부 파서가 dup을 덮어 쓰는 것처럼 JSON 동작에 대해 생각해보십시오. –

+0

감사합니다. Aniket. 문제가 json 구성에있는 것 같습니다. config 파일을 xml 형식으로 변환했습니다. 두 로거가 모두 인식됩니다. – user8426833

답변

1

log4j2JSON 구성 파일에 여러 로거를 정의하려면 으로 선언해야합니다. logger array

, 구성 파일이 아래로 바꿀 것 - 나는 org.xyz 및 com.xyz의 순서를 전환 할 때

{ 
    "configuration": { 
    "name": "Default", 
    "appenders": { 
     "Console": { 
     "name": "Console-Appender", 
     "target": "SYSTEM_OUT", 
     "PatternLayout": {"pattern": "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"} 
     } 
    }, 
    "loggers": { 
     "logger": [ 
       { 
        "name": "org.xyz", 
        "level": "info", 
        "appender-ref": [{"ref": "Console-Appender","level": "info"}] 
       }, 
       { 
        "name": "com.xyz", 
        "level": "debug", 
        "appender-ref": [{"ref": "Console-Appender", "level": "debug"}] 
       } 
       ], 
     "root": { 
     "level": "warn", 
     "appender-ref": {"ref": "Console-Appender","level": "warn"} 
     } 
    } 
    } 
} 
+0

잘 잡으세요! 그것은 효과가 있었다. – user8426833