프로젝트를 진행하면서 System.out.println() 으로 로그를 찍는 버릇이 있었다.
이것이 안좋은 버릇인 건 알았지만 왜 안좋을까에 대한 부분은 찾아보지 않았고, 갑자기 급 궁금해져서 정리해보려고 한다!
먼저 로깅이 뭘까?
시스템을 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록해두는 것
그럼 System.out.println()로 로그를 찍게되면 오는 단점은??
- IO리소스를 많이 잡아먹어 속도가 느리다.
- 최소한의 정보가 없다(날짜, 시간, 타입(error, info ..))
- 로그를 별도의 위치에 남기기 힘들어서 로그 내용을 가져오기 힘들다.
자 그럼 logging 관련 프레임워크인 log4j2
에 대해서 간단히 알아보자!!
먼저 build.gradle에서
implementation org.springframework.boot:spring-boot-starter-web'
dependency가 정의되어 있다면 기본적으로 logging모듈이 추가되어 있어서 오류가 난다고 한다.
따라서 logging모듈을 제거 후 log4j2에 대한 의존성을 추가해줘야 한다.
logging모듈 의존성 제거
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
log4j2 의존성 설정
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
이후에 Log4j2.xml파일을 추가해준다.
경로 : resources/log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 해당 설정파일에서 사용하는 프로퍼티-->
<Properties>
<property name="LOGS_PATH">D:\test_logs</property>
</Properties>
<Appenders>
<!-- 콘솔 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %-5level %logger{35} - %msg%n" />
</Console>
<!-- 파일 -->
<RollingFile name ="RollingFile">
<FileName>${LOGS_PATH}/log4j2.log</FileName>
<FilePattern>${LOGS_PATH}/log4j2.%d{yyyy-MM-dd}.%i.log.gz</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %5p [%c] %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
<TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Application Loggers -->
<!-- Root 보다 우선 순위가 높습니다. -->
<logger name="com.test.api.controller" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</logger>
<logger name="com.test.api.service" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</logger>
<!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE -->
<Root level="INFO">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
그 후 어노테이션을 추가 후 로그를 찍으면 로그도 ㅉ기히고 xml 설정에 따라 파일도 생성이 된다!
@Log4j2
@RestController
public class TestController {
@GetMapping(value = "/log")
public void log() throws Exception {
//FATAL, ERROR, WARN, INFO, DEBUG, TRACE
log.fatal("FATAL");
log.error("ERROR");
log.warn("WARN");
log.info("INFO");
log.debug("DEBUG");
log.trace("TRACE");
}
}
의무적으로가 아닌 진짜 궁금해서 찾고 정리한 건 오랜만인 거 같다.
취준이 끝나면 더더덛더더더더 바쁘게 살아야지
끄읏!