로깅(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) 대신 로깅 라이브러리를 사용하는 이유
- 레벨 기반 로깅
로깅 라이브러리는 다양한 로그 레벨을 제공하여, 메시지의 중요도를 명확히 할 수 있다.
디버깅, 문제 해결, 성능 모니터링 등에서 필요한 레벨별 필터링과 관리가 가능하다.
- 로그 포맷 지원
로깅 라이브러리는 메시지의 포맷을 설정할 수 있어, 시간 정보, 로그 레벨, 클래스 이름 등을 포함하여 구조화된 로그를 생성할 수 있다. 이는 로그 메시지를 이해하기 쉽고, 분석하기 용이하게 만든다.
- 성능 및 관리 용이성
로깅 라이브러리는 성능 최적화와 스레드 안전성을 고려하여 설계되어 있어, 대규모 시스템에서도 안정적으로 동작한다. 또한 로그를 파일이나 데이터베이스에 저장하고 관리하는 기능을 제공하여, 로그 관리와 분석을 효율적으로 수행할 수 있다.