(spring) slf4j + logback 적용

violet·2024년 5월 2일

Logback

  • 한동안 가장 많이 사용되었던 log4j의 후속 버전으로 상위호환
  • log4j --(10배성능)--> logback --(18배성능)--> log4j2

SLF4J

  • 여러가지 종류의 로그 라이브러리와 프로젝트 사이 중간단에 존재하는 라이브러리
    구현체(log4j/log4j2/jul/logback) -----> 추상화(SLF4J) -----> (프로젝트)
  • 사용하는 구현체 로그 라이브러리를 간단하게 변경 가능
  • 사용하는 구현체 로그 라이브러리를 변경하더라도 프로젝트는 SLF4J와 직접적으로 붙기때문에 코드 수정이 없음.
  1. spring mvc 프로젝트에 적용

1.1.1 gradle 프로젝트일때 build.gradle 파일의 dependencies 안에 해당 코드 추가

dependencies {
    implementation 'org.slf4j:slf4j-api:1.7.32'
    implementation 'ch.qos.logback:logback-classic:1.2.10'
    }

1.1.2 maven 프로젝트일때 (생략)

1.2 [프로젝트]/src/main/resources 경로에 logback.xml 파일 추가

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 롤링 파일 애펜더 -->
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 기본 로그 파일 위치 지정 (사용되지 않지만, 초기 파일 위치 설정을 위해 필요) -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 파일 이름 패턴 변경 및 저장 위치 지정 -->
            <fileNamePattern>/home/ubuntu/logme/tomcat8.5/logs/프로젝트명.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 최대 30일 보관 -->
            <maxHistory>30</maxHistory>
            <!-- 시작 시 오래된 로그 파일 정리 -->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>

    </appender>

    <root level="info">
        <appender-ref ref="ROLLING" />
    </root>
</configuration>

1.3 java 파일에 테스트할 로그 작성

객체생성

Logger logger = LoggerFactory.getLogger("");	// 로그 메시지 객체 생성

메소드 작성

	@GetMapping("/test/{str}")
	public ResponseEntity<ResVO> test(@PathVariable String str) throws Exception
	{
		System.out.println("test : " + str);

		long sTime = System.currentTimeMillis();
		ResVO result = new ResVO();
		result.setResultcode(LogmeCode.proc_ok_num);
		long eTime = System.currentTimeMillis();

		System.out.println("소모시간(ms) : " + (eTime - sTime));
		String logStr = "Test logback level : ";
		logger.trace(logStr+"trace");
		logger.debug(logStr+"debug");
		logger.info(logStr+"info");
		logger.warn(logStr+"warn");
		logger.error(logStr+"error");

		if(result.getResultcode() != LogmeCode.proc_ok_num)
			return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result);
		else
			return ResponseEntity.status(HttpStatus.OK).body(result);
	}

1.4 배포 후 server 단 tomcat/logs안에 존재하는 로그 파일 생성 및 내용 확인

profile
기억저장소

0개의 댓글