package egovframework.rte.fdl.logging; import static org.junit.Assert.assertEquals; import egovframework.rte.fdl.logging.sample.LogTestSample; import javax.annotation.Resource; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath*:META-INF/spring/context-common.xml" }) public class LoggerHierarchyTest { @Resource(name = "logTestSample") LogTestSample logTestSample; /** * 아래는 Logger Hierarchy를 테스트하는 메소드 * egovframework Logger: level=DEBUG, appender=Console * targetLogger: level=DEBUG, appender=Console * */ @Test public void testLoggerHierarchy() throws Exception { // Logger targetLogger = LogManager.getLogger("egovframework.rte.fdl.logging.sample.LogTestSample"); 과 동일 // log4j2.xml에는 "egovframework.rte.fdl.logging.sample.LogTestSample" 이름의 Logger가 존재하지 않으므로 // Named Hierarchy에 따라 이름이 가장 많이 매칭되는 "egovframework" 이름의 Logger설정을 따른다. Logger targetLogger = (Logger) logTestSample.getTargetLogger(); assertEquals("egovframework.rte.fdl.logging.sample.LogTestSample", targetLogger.getName()); // targetLogger의 ParentLogger가 egovframework 로거인지 확인 Logger parentLogger = targetLogger.getParent(); Logger egovLogger = (Logger) LogManager.getLogger("egovframework"); assertEquals(egovLogger.getName(), parentLogger.getName()); assertEquals(targetLogger.getLevel(), egovLogger.getLevel()); assertEquals(targetLogger.getAppenders(), egovLogger.getAppenders()); assertEquals(targetLogger.getLevel(), egovLogger.getLevel()); assertEquals(targetLogger.isAdditive(), egovLogger.isAdditive()); // getAdditivity() - log4j1.x // 로그 출력 // 현재 egovframework 로그 레벨이 log4j2.xml 에 DEBUG 로 정의돼 있으므로 // 해당 로거 설정을 따르는 logTestSample 의 메서드를 실행하면 // DEBUG, INFO, WARN, ERROR, FATAL 에 대한 모든 로그가 출력됨 logTestSample.executeSomeLogic(); // 하단 Console에서 로그 확인 } }