log

유요한·2023년 12월 1일
0

Spring Boot

목록 보기
22/25
post-thumbnail

로그(log)

로그 사용 시 장점

  • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.

  • 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.

  • 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.

  • 성능도 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 로그를 사용한다.

로깅 라이브러리 - logback

logback 설정

Log4j2란?

log4j(Log for Java)란 이전 버전인 Log4j 1.x에 비해 크게 개선된 Log4j로의 업그레이드이며 Logback 아키텍처의 몇 가지 고유한 문제를 수정하면서 Logback에서 사용할 수 있는 많은 개선 사항을 제공하는 대표적인 자바 로깅 프레임워크이다. og4j 2.13.0 이상에는 Java 8이 필요합니다. 버전 2.4~2.12.1에는 Java 7이 필요합니다(Log4j 팀은 더 이상 Java 7을 지원하지 않습니다). 일부 기능에는 선택적 종속성이 필요합니다. 이러한 기능에 대한 설명서는 필요한 종속성을 지정합니다.

Log4j2를 사용하기 위해서는 아래와 같이 2단계로 프로젝트에 추가할 수 있습니다.

  1. 스프링 부트의 Default 자바 로깅 프레임워크는 logback이다. 아래와 같이 build.gradle안에 dependencies에는 org.springframework.boot:spring-boot-starter-web에는 logback이 기본적으로 구현되어있다.
   implementation 'org.springframework.boot:spring-boot-starter-web'

기존 자바 로깅 프레임워크인 logback의 종속성을 제거해야합니다.

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}
  1. Log4j2 프레임워크의 종속성을 추가해준다.
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}

Log4j2 설정 파일

/src/main/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>
  • <Property/> : xml파일에서 사용할 공용 속성 값을 정의한다.
  • <Appender/> : StringBuilder에서 사용되는 append와 비슷한 개념이다, 실제로 로그를 작성하는 객체를 정의한다고 생각하면 된다.
  • <Logger/> : Appender가 작성한 대상들을 명시해준다.
profile
발전하기 위한 공부

0개의 댓글