반응형

전자정부프레임워크에서 로그 기능을 구현하는 방법을 학습합니다. 로그는 시스템의 상태를 파악하고 오류를 추적하며 성능을 분석하는 데 중요한 역할을 합니다.

전자정부프레임워크는 **SLF4J(Simple Logging Facade for Java)**와 Logback을 기본으로 사용하여 로그를 관리할 수 있습니다. 이번 학습에서는 로그 설정부터 기본적인 사용법까지 단계별로 설명합니다.


1. 로그의 중요성

  1. 문제 디버깅: 시스템 오류 발생 시 문제 원인 파악 가능
  2. 시스템 모니터링: 애플리케이션 상태를 실시간으로 확인
  3. 성능 분석: 특정 요청의 처리 속도 및 자원 사용량 확인
  4. 보안: 사용 기록 및 비정상적인 접근 시도 로그

2. SLF4J와 Logback 설정

전자정부프레임워크는 기본적으로 SLF4J와 Logback을 지원합니다. 이를 통해 손쉽게 로그를 기록할 수 있습니다.

2-1. Logback 설정 파일 작성

src/main/resources/logback.xml:

<configuration>
    <!-- 콘솔에 출력되는 로그 설정 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 로그 파일 저장 설정 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 로거 설정 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

3. SLF4J를 이용한 로그 사용법

3-1. Logger 선언

SLF4J를 사용하여 클래스에 로그를 기록하려면 다음과 같이 Logger를 선언합니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SampleService {
    private static final Logger LOGGER = LoggerFactory.getLogger(SampleService.class);

    public void processSample() {
        LOGGER.info("Processing sample data...");
        try {
            // 작업 코드
            LOGGER.debug("Debugging information here.");
        } catch (Exception e) {
            LOGGER.error("An error occurred: ", e);
        }
    }
}

3-2. 로그 레벨

로그에는 중요도에 따라 다양한 레벨이 있습니다.

  • TRACE: 가장 상세한 정보, 주로 디버깅용
  • DEBUG: 개발 중 디버깅을 위한 정보
  • INFO: 일반적인 정보성 메시지
  • WARN: 잠재적인 문제나 중요하지 않은 경고
  • ERROR: 실행 중 발생한 심각한 오류

4. 로그 출력 확인

4-1. 콘솔 출력

로그 설정에 따라 ConsoleAppender가 동작하며, Eclipse나 IntelliJ의 콘솔 창에서 로그를 확인할 수 있습니다.

4-2. 파일 출력

RollingFileAppender를 통해 logs/app.log에 로그가 기록됩니다. 날짜별로 로그 파일이 구분되어 저장됩니다.


5. 로그 활용 팁

  1. 적절한 로그 레벨 사용: 중요한 정보는 INFO, 디버깅은 DEBUG로 구분
  2. 민감한 정보 주의: 개인정보나 보안 관련 정보는 기록하지 않음
  3. 로그 크기 관리: maxHistory 설정을 통해 로그 파일이 과도하게 쌓이는 것을 방지
  4. 로그 분석 도구 사용: ELK(Stack)나 Splunk와 같은 도구를 활용해 로그를 분석

6. 로그 테스트

6-1. Controller 예제

@Controller
public class LogTestController {
    private static final Logger LOGGER = LoggerFactory.getLogger(LogTestController.class);

    @RequestMapping("/logTest.do")
    public String logTest() {
        LOGGER.info("INFO level log: /logTest.do is called");
        LOGGER.debug("DEBUG level log: Debugging /logTest.do");
        LOGGER.warn("WARN level log: Potential issue in /logTest.do");
        LOGGER.error("ERROR level log: Simulated error in /logTest.do");

        return "logTest";
    }
}

6-2. 로그 출력 결과 예시

2024-12-23 10:15:45 [main] INFO  LogTestController - INFO level log: /logTest.do is called  
2024-12-23 10:15:45 [main] DEBUG LogTestController - DEBUG level log: Debugging /logTest.do  
2024-12-23 10:15:45 [main] WARN  LogTestController - WARN level log: Potential issue in /logTest.do  
2024-12-23 10:15:45 [main] ERROR LogTestController - ERROR level log: Simulated error in /logTest.do  

7. 마무리

이번 시간에는 전자정부프레임워크에서 제공하는 로그 기능을 활용하는 방법을 학습했습니다. 로그는 시스템 안정성과 유지보수를 위해 꼭 필요한 기능입니다. 다음에서는 전자정부프레임워크의 화면 구성 및 템플릿 활용을 학습합니다.

반응형

+ Recent posts