Log4j 2 환경설정 [코드 내에서 직접 설정 시]

개요

Log4j 2 환경 설정(Appender, Layout, Log Level 등)을 코드 내에서 직접 제어할 수 있다.
아래는 별도의 외부 설정파일 없이도 로깅할 수 있는 방법을 설명한다.

설명

사용 방법

별도의 Log4j 2 설정파일 없이도 코드 내에서 Logger 객체를 획득하여 로깅이 가능하다.
LogManager.getLogger() 메서드를 통해 Logger 객체를 생성하며, Log4j 2는 디폴트로 설정된 Logger 객체를 반환한다.
디폴트 Logger 객체의 기본적인 디폴트 설정은 다음과 같다.

  Log Level : ERROR
  Appender  : ConsoleAppender
  Layout    : PatternLayout
  pattern   : %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

위 Logger 객체를 org.apache.logging.log4j.core.Logger로 캐스팅하면, Log Level, Appender, Layout 등 설정을 변경할 수 있다.
예시에서 사용된 설정 관련 메서드는 다음과 같다. 더 자세한 정보는 Log4j 2 API를 참조하도록 한다.

  LogManager.getLogger()                                                -- Logger 생성
  Logger.addAppender(), Logger.removeAppender(), Logger.getAppenders()  -- Logger에 Appender 추가 및 제거, 획득
  Layout.createLayout()                                                 -- Layout 생성
  Appender.createAppender(), Appender.removeAppender()                  -- Appender 생성 및 삭제
  Logger.setLevel(), Logger.getLevel()                                  -- Log Level 설정 및 획득

사용 예시

@Test
public void log4j2ConfigTest() {
 
	// 디폴트 Logger 생성
	Logger logger = (Logger) LogManager.getLogger();
 
	// 디폴트 설정 확인
	// Log Level: ERROR
	assertEquals(Level.ERROR, logger.getLevel());
	// Appender: Console
	Map<String, Appender> appenders = logger.getAppenders();
	assertEquals(1, appenders.size()); 
	assertEquals(ConsoleAppender.class, appenders.get("Console").getClass());
	// Layout: Pattern
	ConsoleAppender console = (ConsoleAppender) appenders.get("Console");
	assertEquals(PatternLayout.class, console.getLayout().getClass());
	PatternLayout pattern = (PatternLayout) console.getLayout();
	assertEquals("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n", pattern.toString());
 
	// 설정 변경 전: ERROR Level 이상 로그만 출력됨
	logger.debug("변경 전: [DEBUG] Test log4j 2.");
	logger.info("변경 전: [INFO] Test log4j 2.");
	logger.warn("변경 전: [WARN] Test log4j 2.");
	logger.error("변경 전: [ERROR] Test log4j 2.");
	logger.fatal("변경 전: [FATAL] Test log4j 2.");
 
	/*
	출력결과
	===================
	14:17:09.930 [main] ERROR egovframework.rte.fdl.logging.LogTest - 변경 전: [ERROR] Test log4j 2.
	14:17:09.931 [main] FATAL egovframework.rte.fdl.logging.LogTest - 변경 전: [FATAL] Test log4j 2
	*/
 
	// 디폴트 설정 변경
	logger.removeAppender(console);
	// Appender: File
	PatternLayout layout = PatternLayout.createLayout("%m%n", null, null, null, null, null);
	FileAppender file = FileAppender.createAppender("./logs/file/promatic.log", "false", "false", "file", "false", "true", "false", null, layout, null, "false", null, null); 
	logger.addAppender(file);
 
	// Log Level: DEBUG
	logger.setLevel(Level.DEBUG);
 
	// 설정 변경 후: DEBUG Level 이상 로그가 file(promatic.log)에 출력됨
	logger.debug("변경 후: [DEBUG] Test log4j 2.");
	logger.info("변경 후: [INFO] Test log4j 2.");
	logger.warn("변경 후: [WARN] Test log4j 2.");
	logger.error("변경 후: [ERROR] Test log4j 2.");
	logger.fatal("변경 후: [FATAL] Test log4j 2.");
 
	/* 
	출력결과
	===================
	변경 후: [DEBUG] Test log4j 2.
	변경 후: [INFO] Test log4j 2.
	변경 후: [WARN] Test log4j 2.
	변경 후: [ERROR] Test log4j 2.
	변경 후: [FATAL] Test log4j 2. 
	*/
 
}

참고자료

 
egovframework/rte3/fdl/logging/log4j_2/프로그래밍내에서_직접_설정하는_방법.txt · 마지막 수정: 2023/12/21 05:21 (외부 편집기)
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki