로그 설정하기
로그를 설정하는 근본적인 이유는 오류/에러 상황을 제대로 잘 파악하기 위해서이다.
또한, 매번 sysout으로 로그를 찍는 것은 리소스를 낭비한다고 볼수 있다.
스프링부트는 기본적으로 Logback, Log4j2, java utill logging을 지원하는데
내가 사용하려는 Logback은 SLF4J의 구현체이자 스프링 부트의 기본 로그 객체라고 볼 수 있고
다른 로그 성능과 비교했을 때 Logback의 성능이 확연히 좋다고 한다.
처음 스프링부트 프로젝트를 만들었을 때 spring-boot-starter-web 안에
이미 spring-boot-starter-logging가 있기 때문에 별다른 디펜던시 추가 없이 이용이 가능하다.
Logback의 로그 레벨은 TRACE > DEBUG > INFO > WARN > ERROR
1. 간단한 로그 설정
스프링부트가 아닐 경우는 logback관련 디펜던시를 따로 추가해줘야 하지만
스프링부트는 로그백이 기본적으로 설정되어 있어서 별도의 라이브러리가 필요없다.
이미 spring-boot-starter-web안에 logging 관련 구현체가 있기 때문.
다른 것은 필요없고 그냥 쓰고 싶은 클래스에서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class test() { Logger logger = LoggerFactory.getLogger(컨트롤러 이름.class); logger.trace("trace -- Hello world."); logger.debug("debug -- Hello world."); logger.info("info -- Hello world."); logger.warn("warn -- Hello world."); logger.error("error -- Hello world."); } | cs |
이렇게만 해주면 받아올 수 있다.
2. application.properties를 통한 로깅 커스터마이징
(1) application.propertiest에서
#logging config
logging.config=classpath:logback-config.xml 이 부분을 추가해준다.
(2) resource 폴더 밑에도 동명의 logback-config.xml파일을 하나 만들어준다.
spring boot 로그백은 기본적으로 logback-spring이라는 이름을
설정파일을 읽어간다고 한다. 물론 다른 이름을 쓰고 싶다면 프로퍼티스로 변경도 가능
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | <?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="LOGS_ABSOLUTE_PATH" value="./logs" /> <!-- 해당 설정파일에서 사용될 값을 정의. LOGS_ABSOLUTE_PATH(절대 경로)--> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern> </layout> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOGS_ABSOLUTE_PATH}/logback.log</file> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOGS_ABSOLUTE_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>5MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> <logger name="org.springframework.web" level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </logger> <!-- 로그 용어 정리 --> <!-- *appender : 어디에, 어떻게 로그를 찍을 것인지에 대한 설정 -appender의 class 종류 ConsoleAppender : 콘솔에 로그를 찍는 방법 FileAppender : 파일에 로그를 찍는 방법 RollingFileAppender : 여러개의 파일을 순회하면서 로그를 찍는 방법(설정할 게 많음.) SMTPAppender : 로그를 메일에 찍어 보내는 방법 DBAppender : 데이터베이스에 로그를 찍는 방법 -appender의 Pattern 종류 1. %Logger{length} - Logger name을 축약할 수 있다. {length}는 최대 자리 수 2. %thread - 현재 Thread 이름 3. %-5level - 로그 레벨, -5는 출력의 고정폭 값 4. %msg - 로그 메시지 (=%message) 5. %n - new line 6. ${PID:-}- 프로세스 아이디 %d : 로그 기록시간 %p : 로깅 레벨 %F : 로깅이 발생한 프로그램 파일명 %M : 로깅일 발생한 메소드의 이름 %l : 로깅이 발생한 호출지의 정보 %L : 로깅이 발생한 호출지의 라인 수 %t : 쓰레드 명 %c : 로깅이 발생한 카테고리 %C : 로깅이 발생한 클래스 명 %m : 로그 메시지 %r : 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간 *logger : 해당 appender를 참조하여 해당 로거가 사용될 패키지와 로그레벨을 설정 -log level의 종류는 위에서 명시했듯 ERROR < WARN < INFO < DEBUG < TRACE 해당 레벨 이하의 것은 다 찍는다. 즉, INFO 레벨로 지정하면 INFO, WARN, ERROR 로그가 찍히고, WARN 레벨로 지정하면 WARN, ERROR 로그가 찍힌다. TRACE, DEBUG 레벨로 찍을 경우 로그가 상당히 많이 찍히므로 주의해야한다. --> </configuration> | cs |
나는 로깅 커스터마이징을 통해 로그를 만들었고, 해당 내용은
내 입맛에 맞게 재정의해서 쓰는 것이 가장 좋을 것 같다.
'프로그래밍 > SpringBoot' 카테고리의 다른 글
[스프링 부트 게시판] 게시판 리스트 페이징 처리 (0) | 2020.09.30 |
---|---|
[스프링 부트 게시판] 게시판 리스트 만들기 (0) | 2020.09.30 |
[스프링 부트 게시판] Mysql, Mybatis 적용하기 (0) | 2019.12.01 |
[스프링 부트 게시판] Spring Boot Project 생성하기 / View 띄우기 (0) | 2019.12.01 |
[스프링 부트 게시판] 스프링부트 게시판 만들기에 앞서 (2) | 2019.11.16 |