로깅(Logging)

2경빈·2024년 12월 18일

Spring Boot

목록 보기
19/19

로깅(Logging)

로깅(Logging)은 소프트웨어나 시스템에서 발생하는 이벤트와 상황을 기록하는 것을 말한다.
주로 디버깅, 모니터링, 분석 등의 목적으로 사용된다.
로깅은 개발자와 운영 팀이 시스템의 상태를 이해하고 문제를 해결하는 데 중요한 도구로 활용된다.

로깅의 중요성

  • 문제 해결

로그는 시스템에서 발생하는 오류나 경고 메시지를 포착하여 문제를 식별하고 해결하는 데 도움을 준다. 예를 들어, 예기치 않은 예외가 발생한 경우 그 원인을 파악할 수 있다.

  • 성능 모니터링

로그는 시스템의 성능을 모니터링하고 리소스 사용량을 추적하는 데 유용하다. 특히 시스템이 부하에 따라 어떻게 반응하는지를 파악하는 데 중요한 정보를 제공한다.

  • 보안 감시

보안 로그는 시스템에 대한 외부 침입이나 비인가된 접근 시도를 탐지하고, 시스템의 보안 상태를 모니터링하는 데 사용될 수 있다.

  • 오디팅 및 규정 준수

일부 산업 규정이나 법적 요구사항에서 로그가 요구될 수 있으며, 이를 통해 시스템 사용 내역을 추적하고 검토할 수 있다.

로깅의 구성 요소

  • 로그 레벨

로그 메시지의 중요도를 나타내는 레벨. 일반적으로는 DEBUG, INFO, WARN, ERROR, FATAL 등 다양한 레벨이 있다.

  • 로그 포맷

로그 메시지의 형식을 정의. 예를 들어, 시간, 로그 레벨, 메시지 내용 등을 포함할 수 있다.

  • 로그 저장 위치

로그 메시지를 저장하는 위치. 일반적으로는 파일, 데이터베이스, 실시간 스트림 등 다양한 방법이 있다.
0

  • 로그 회전

로그 파일이 너무 커지지 않도록 주기적으로 백업하거나 새 파일로 전환하는 과정이다.

사용 방법

//application.properties
logging.level.root=WARN

//Controller
@GetMapping
public String hello(){
	private Logger log = LoggerFactory.getLogger(HelloController.class);

	System.out.println("[정보] [0시0분0초]HelloController메소드가 호출됨");
	log.trace("hello method called!!!~!");
	log.debug("hello method called!!!~!");
	log.info("hello method called!!!~!");
	log.warn("hello method called!!!~!");
	log.error("hello method called!!!~!");
	return "hello~~";
}

application.properties에서 설정한 로그 레벨보다 높은 레벨의 로그만 출력된다.

스프링부트에서 사용

@Slf4j
public class HelloController {
    @GetMapping
    public String hello(){
        System.out.println("[정보] [0시0분0초]HelloController메소드가 호출됨");
        log.trace("hello method called!!!~!");
        log.debug("hello method called!!!~!");
        log.info("hello method called!!!~!");
        log.warn("hello method called!!!~!");
        log.error("hello method called!!!~!");
        return "hello~~";
    }
}

@Slf4j어노테이션을 사용한다.

Ex)

logback-spring.xml

logback-spring.xml은 Logback 로깅 프레임워크를 스프링 애플리케이션에서 설정하는 데 사용되는 파일이다. 일반적으로 스프링 부트 프로젝트에서 로깅 설정을 관리하고자 할 때 주로 사용된다. 이 파일을 사용하면 로깅 레벨, 출력 형식, 로그 파일 위치 등을 설정할 수 있다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="fa" class="ch.qos.logback.core.FileAppender">
        <file>D:/dev/swyapp.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ca" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root>
        <appender-ref ref="fa"/>
        <appender-ref ref="ca"/>
    </root>
</configuration>

System.out.println (이하 sout) 대신 로깅 라이브러리를 사용하는 이유

  • 레벨 기반 로깅

로깅 라이브러리는 다양한 로그 레벨을 제공하여, 메시지의 중요도를 명확히 할 수 있다.
디버깅, 문제 해결, 성능 모니터링 등에서 필요한 레벨별 필터링과 관리가 가능하다.

  • 로그 포맷 지원

로깅 라이브러리는 메시지의 포맷을 설정할 수 있어, 시간 정보, 로그 레벨, 클래스 이름 등을 포함하여 구조화된 로그를 생성할 수 있다. 이는 로그 메시지를 이해하기 쉽고, 분석하기 용이하게 만든다.

  • 성능 및 관리 용이성

로깅 라이브러리는 성능 최적화와 스레드 안전성을 고려하여 설계되어 있어, 대규모 시스템에서도 안정적으로 동작한다. 또한 로그를 파일이나 데이터베이스에 저장하고 관리하는 기능을 제공하여, 로그 관리와 분석을 효율적으로 수행할 수 있다.

profile
eggs before hatching

0개의 댓글