로그로그로그로그

전성영·2022년 10월 25일
0

프로젝트를 진행하면서 System.out.println() 으로 로그를 찍는 버릇이 있었다.

이것이 안좋은 버릇인 건 알았지만 왜 안좋을까에 대한 부분은 찾아보지 않았고, 갑자기 급 궁금해져서 정리해보려고 한다!


먼저 로깅이 뭘까?

로깅

시스템을 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록해두는 것

그럼 System.out.println()로 로그를 찍게되면 오는 단점은??

  • IO리소스를 많이 잡아먹어 속도가 느리다.
  • 최소한의 정보가 없다(날짜, 시간, 타입(error, info ..))
  • 로그를 별도의 위치에 남기기 힘들어서 로그 내용을 가져오기 힘들다.

자 그럼 logging 관련 프레임워크인 log4j2 에 대해서 간단히 알아보자!!

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");
    }

}

의무적으로가 아닌 진짜 궁금해서 찾고 정리한 건 오랜만인 거 같다.
취준이 끝나면 더더덛더더더더 바쁘게 살아야지

끄읏!

Reference

https://minkwon4.tistory.com/162

profile
Slow and Steady

0개의 댓글