로깅 (Logging)

f1v3·2023년 4월 25일

스프링 부트가 기본으로 Logback을 제공

@RestController
문자를 return 하면 String이 그대로 반환됨 (소스코드도 ok로 출력)

@Controller
return은 view name이 반환되는 것

package hello.springmvc.basic;

// slf4j 사용하기 -> @Slf4j 사용해도 됨
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogTestController {
    private final Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping("/log-test")
    public String logTest(){
        String name = "Spring";

        System.out.println("name = " + name);

        log.trace("trace log={}", name);
        log.debug("debug log={}", name);
        log.info(" info log={}", name);
        log.warn(" warn log={}", name);
        log.error("error log={}", name);

        return "ok";

    }

}
		// Log Level 순서 (기본값 = info)
        // application.properties에서 설정 가능
        log.trace("trace log={}", name);
        log.debug("debug log={}", name);
        log.info(" info log={}", name);
        log.warn(" warn log={}", name);
        log.error("error log={}", name);
# application.properties
logging.level.hello.springmvc=[Log level]

실제 서비스 되는 서버에서는 info level을 주로 사용 (trace, debug 로그를 안찍기 위해)
-> System.out.println은 무조건 로그를 남긴다는 단점이 존재함

왜 { }로 표현을 하나?

아래와 같은 환경이라고 생각해보자

1. log.trace(" trace log=" + name);
2. log.trace("trace log={}", name);

logging.level.hello.springmvc=info

둘의 차이는 무엇인가
1. Log Level에 맞지 않음에도 연산이 되면서 쓸모 없는 리소스를 사용하게 됨.
2. 로그 출력 레벨을 info로 하면 의미없는 연산이 발생하지 않음

추가적으로 콘솔에만 출력하는 것이 아닌 파일이나 네트워크 등에 별도로 로그를 남길 수 있음.

System.out.println() 말고 log 쓰자..

profile
https://blog.f1v3.my

0개의 댓글