# Spring MVC ๊ธฐ๋ณธ ๊ธฐ๋Šฅ - Logging
Study Repository

Spring MVC ๊ธฐ๋ณธ ๊ธฐ๋Šฅ - Logging

by rlaehddnd0422

๋กœ๊น…

์•ž์œผ๋กœ๋Š” System.out.println()๊ณผ ๊ฐ™์€ ์‹œ์Šคํ…œ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๐Ÿšฉ ๋กœ๊ทธ์™€ ๊ด€๋ จํ•ด์„œ๋Š” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ฉด ๋๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ์ตœ์†Œํ•œ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๋งŒ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋กœ๊ทธ ์‚ฌ์šฉ ์žฅ์ 

  • ์“ฐ๋ ˆ๋“œ ์ •๋ณด, ํด๋ž˜์Šค ์ด๋ฆ„ ๊ฐ™์€ ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ถœ๋ ฅ ๋ชจ์–‘์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ๋Š” ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์šด์˜ ์„œ๋ฒ„์—์„œ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ๋“ฑ ๋กœ๊ทธ๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • System.out ์ฝ˜์†”์—๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํŒŒ์ผ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ๋“ฑ, ๋กœ๊ทธ๋ฅผ ๋ณ„๋„์˜ ์œ„์น˜์— ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ ํŒŒ์ผ๋กœ ๋‚จ๊ธธ ๋•Œ์—๋Š” ๋‚ ์งœ ๋ณ„, ํŠน์ • ์šฉ๋Ÿ‰์— ๋”ฐ๋ฅธ ๋กœ๊ทธ ๋ถ„ํ• ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ ์ž์ฒด๋„ ์ผ๋ฐ˜ System.out๋ณด๋‹ค ์ข‹์Šต๋‹ˆ๋‹ค. (๋‚ด๋ถ€ ๋ฒ„ํผ๋ง์ด๋‚˜, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๋“ฑ๋“ฑ ) 

๊ทธ๋ž˜์„œ ์‹ค๋ฌด์—์„œ๋Š” ์‹œ์Šคํ…œ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋กœ๊ทธ๋ฅผ ๊ผญ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์Šคํ”„๋ง ๋ถ€ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํ”„๋ง ๋ถ€ํŠธ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(spring-boot-starter-logging)๊ฐ€ ํ•จ๊ป˜ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ SLF4J, Logback์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Logback, Log4J, Log4J2 ๋“ฑ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ, ์ด๋ฅผ ํ†ตํ•ฉํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด SLF4J

๋กœ๊ทธ ์„ ์–ธ ๋ฐฉ๋ฒ•

1. ์ง์ ‘ ๊ฐ์ฒด ํ˜ธ์ถœํ•ด์„œ ์„ ์–ธ

private Logger log = LoggerFactory.getLogger(getClass());

2. @Slf4j ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ ์–ธ

@Slf4j
public class LogTestController{

	...

๋กœ๊ทธ ํ˜ธ์ถœ

์‹œ์Šคํ…œ ์ฝ˜์†”์„ ํ†ตํ•œ ์ง์ ‘ ์ถœ๋ ฅ์—์„œ๋Š” System.out.println("hello"); ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ๋Š” log.info("hello"); ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ ๋กœ๊ทธ๋Š” ์‹œ์Šคํ…œ ์ฝ˜์†”๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋กœ๊ทธ ๋ ˆ๋ฒจ์ด ์žˆ์–ด ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„  ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ ˆ๋ฒจ ๋ณ„๋กœ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

@Slf4j
@RestController
public class LogTestController {

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

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

        // log high -> low Level
        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";
    }
}

 

 @Controller๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌํ„ด ํƒ€์ž…์ด String์ผ ๊ฒฝ์šฐ์— ํ•ด๋‹น String๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ทฐ๋ฅผ ์ฐพ๊ณ  ๋ทฐ๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ฒŒ ๋˜๋Š” ๋ฐ˜๋ฉด, @RestController๋Š” @Controller์— @ResponseBody๋ฅผ ๋”ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฉ”์†Œ๋“œ์˜ return ํƒ€์ž…์ด String ์ผ ๊ฒฝ์šฐ์— String์„ message body๋กœ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

 

๋กœ๊ทธ ๋ ˆ๋ฒจ 

trace โ–ถ๏ธŽ debug โ–ถ๏ธŽ info โ–ถ๏ธŽ warn โ–ถ๏ธŽ error

High -------------------------------Low

 

๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •

application.properties ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#์ „์ฒด ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •(๊ธฐ๋ณธ info)
logging.level.root=info

#hello.springmvc ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •
logging.level.hello.springmvc=debug

์ด๋ ‡๊ฒŒ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜๋ฉด ์„ค์ •ํ•ด ์ค€ ๋ ˆ๋ฒจ์„ ํฌํ•จํ•ด ๋‚ฎ์€ ๋ ˆ๋ฒจ๋“ค์˜ ๋กœ๊ทธ๋งŒ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

๋Œ€๊ฐœ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ๋Š” ๋กœ๊ทธ๋ ˆ๋ฒจ์„ debug ๋ ˆ๋ฒจ๋กœ, ์šด์˜ ์„œ๋ฒ„์—์„œ๋Š” info ๋ ˆ๋ฒจ๋กœ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

์˜ฌ๋ฐ”๋ฅธ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ•

(O) log.debug("data = {}", data);

์˜๋ฏธ์—†๋Š” ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

(X) log.debug("data = " + data);

 

์ž˜๋ชป๋œ ๊ฒฝ์šฐ์˜ ์ผ€์ด์Šค๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์ถœ๋ ฅ๋ ˆ๋ฒจ์„ debug๋ณด๋‹ค ๋‚ฎ์€ info๋กœ ์„ค์ •ํ•ด๋„ ์ฝ”๋“œ์˜ "data = " + data๊ฐ€ ์‹ค์ œ ์‹คํ–‰์ด ๋˜์–ด ๋ฒ„๋ฆฌ๊ธฐ ๋–„๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌธ์ž ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

์‹ค๋ฌด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ˆ˜๋งŽ์€ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์“ธ๋ฐ์—†๋Š” ์—ฐ์‚ฐ์„ ํ•ด์„œ ์ž์›์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ