티스토리 뷰

응용 프로그램 코드에 로그 요청을 삽입하려면 상당한 양의 계획과 노력이 필요합니다. Apache의 조사 결과에 의하면 어플리케이션에서 로깅전용 코드의 비율이 약 4%를 차지 했다고 하네요. system.out.println 구문을 남발하게 되면 그 프로그램의 성능은 하락하게 됩니다. Log4j 2응 이용하면 시스템 효율도 향상시키고 로깅도 안정적으로 처리할 수 있게 됩니다.

 

자 그럼 Log4j 2의 구성 방법에 대해 살펴 보겠습니다.

 

1. XML, JSON, YAML 또는 속성 형식으로 작성된 구성파일을 통해

2. 프로그래밍 방식으로 ConfigurationFactory 및 Configuration 구현을 작성해서

3. 프로그래밍 방식으로 구성 인터페이스에 표시된 API를 호출하여 구성 요소를 기본 구성에 추가함으로써

4. 프로그래밍 방식으로 내부 Logger 클래스의 메서드를 호출함으로써

 

위의 4가지 구성방법중 한가지를 선택하거나 기본 자동구성을 이용할 수 있습니다.

Log4j가 자동으로 구성하는 Auto-Configuration의 순서에 대해서 살펴보겠습니다.

 

1. Log4j는 "log4j.configurationFile" 파일의 시스템 속성을 검사하고 설정되어 있는 경우 파일 확장명과 일치하는 COnfigurationFactory를 사용하여 구성을 로드하려고 시도합니다.

2. 시스템 프로퍼티가 설정되어 있지 않은 경우, ConfigurationFactory 프로퍼티는 클래스패스에서 log4j2-test.properties 를 검색합니다.

3. log4j2-test.properties가 검색되지 않으면 클래스패스에서 log4j2-test.yml 을 찾습니다.

4. log4j2-test.yml 가 검색되지 않으면 클래스패스에서 log4j2-test.json 또는 log4j2-test.jsn 을 찾습니다.

5. json 파일이 검색되지 않으면 클래스패스에서 log4j2-test.xml 을 찾습니다.

6. 테스트 파일을 찾을 수 없으면 클래스 패스에서 log4j.properties 를 찾습니다.

7. log4j.properties가 검색되지 않으면 log4j2.yaml 또는 log4j2.yml 을 찾습니다.

8. yaml 파일을 찾을 수 없으면 log4j.json 또는 log4j2.jsn 을 찾습니다.

9. JSON 파일을 찾을 수 없으면 log4j.xml 을 찾습니다.

10. 위 경우의 설정파일을 모두 찾을 수 없으면 DefaultConfiguration을 사용합니다. 이로 인해 로깅 출력이 콘솔로 이동하게 됩니다.

 

기본설정을 이용해서 log4j를 아래와 같이 응용프로그램에서 사용합니다.

 

  1. import com.test.User
  2. // log4j 클래스를 가져옵니다.
  3. import org.apache.logging.log4j.Logger;
  4. import org.apache.logging.log4j.LogManager;
  5. public calss LoggingTest {
  6. // Static 변수를 선언 Logger  인스턴스를 참조합니다.
  7. private static final Logger logger = LogManager.getLogger(LoggingTest.class);
  8. public static void main(final String... args) {
  9. // 콘솔에 로그를 출력하는 간단한 구성을 설정합니다.
  10.   logger.trace("테스트 시작 !");
  11.   User user = new User();
  12.   
  13.   if(!user.getName()) {
  14.     logger.error("이름 없음.");
  15.   }
  16.   logger.trace("main method 종료.");
  17.  
  18. }

 

Log4j는 구성파일을 찾을 수 없는 경우 기본 구성을 제공합니다.

 

 

본 문에서는 xml로 설정하는 방법에 대해 설명하겠습니다.

 

  1. <? xml version version = "1.0" encoding = "UTF-8" ?>
  2. <Configuration status="WARN">
  3.     <Appenders>
  4.         <Console name="Console" target="SYSTEM_OUT">
  5.             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t]                                     %-5level     %logger{36} - %msg%n" />
  6.         </Console>
  7.     </Appenders>
  8.     <Loggers>
  9.         <Root level="trace">
  10.             <AppenderRef ref="Console"/>
  11.         </Root>
  12.     </Loggers>
  13. </Configuration>

 

위 설정대로 프로그램을 실행시 출력되는 로깅 예입니다.

 

11:53:29.646 [main] TRACE  com.test.LoggingTest - 테스트 시작!

11:53:29.651 [main] ERROR  com.test.LoggingTest - 이름 없음.

11:53:29.651 [main] TRACE  com.test.LoggingTest - main method 종료.

 

간단한 구성방법과 기본구성으로 로깅을 해보았습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함