Amenable 2023. 4. 9. 10:08

1. ๊ฐœ๋… ๐Ÿ‘ฎ‍โ™‚๏ธ

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

โ”œโ”€ springmvc
โ”‚ โ””โ”€ Dependencies
โ”‚     โ””โ”€ org.springframework.boot:spring-boot-starter-thymeleaf
โ”‚        โ””โ”€ org.springframework.boot:spring-boot-starter
โ”‚           โ””โ”€ org.springframework.boot:spring-boot-starter-logging
โ”‚              โ””โ”€ ch.qos.logback:logback-classic
โ”‚              โ””โ”€ org.apache.logging.log4j:log4j-toslf4j
โ”‚              โ””โ”€ org.slf4j:jul-to-slf4j

  ๊ธฐ๋ณธ์ ์œผ๋กœ SLF4J์™€ Logback ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ดํ•˜๋ฉด SLF4J๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , ๊ทธ ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜๋กœ Logback์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

2. ์‚ฌ์šฉ๋ฒ• ๐Ÿ’‚‍โ™‚๏ธ

  ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ด๋•Œ import๋ฅผ ์ฃผ์˜ํ•ด์„œ ํ•˜๋„๋ก ํ•˜์ž.

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 = "amenable";

        log.info("info log={}", name);

        return "ok";
    }
}

  ๋กฌ๋ณต์—์„œ ์ œ๊ณตํ•˜๋Š” @Slf4j๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

@Slf4j
@RestController
public class LogTestController {

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

        log.info("info log={}", name);

        return "ok";
    }
}

  ๋กœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

// ํ˜•์‹
์‹œ๊ฐ„ | ๋กœ๊ทธ๋ ˆ๋ฒจ | ํ”„๋กœ์„ธ์ŠคID | ์Šค๋ ˆ๋“œ ๋ช… | ํด๋ž˜์Šค๋ช… | ๋กœ๊ทธ ๋ฉ”์‹œ์ง€
// ์‹ค์ œ ์ถœ๋ ฅ ๊ฐ’
2023-04-09T09:38:12.671+09:00 INFO 4644 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController : info log=amenable

 

3. ๋กœ๊ทธ ๋ ˆ๋ฒจ ๐Ÿ•ต๏ธ‍โ™‚๏ธ

  ๋กœ๊ทธ ๋ ˆ๋ฒจ์—๋Š” 5๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

TRACE - DEBUG - INFO - WARN - ERROR

  ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” INFO ๋ ˆ๋ฒจ๋ถ€ํ„ฐ(INFO - WARN - ERROR) ๋กœ๊ทธ๋ฅผ ์ฐ๊ฒŒ ๋˜์–ด์žˆ๋‹ค.

# ํŒŒ์ผ : application.properties
# ์ „์ฒด ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •(๊ธฐ๋ณธ ๊ฐ’)
logging.level.root=info
@Slf4j
@RestController
public class LogTestController {

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

        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";
    }
}
2023-04-09T09:42:49.545+09:00 INFO 15304 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController : info log=amenable
2023-04-09T09:42:49.546+09:00 WARN 15304 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController : warn log=amenable
2023-04-09T09:42:49.546+09:00 ERROR 15304 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController : error log=amenable

  ํ•˜์ง€๋งŒ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ๋กœ๊ทธ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ TRACE์™€ ERROR๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค.

  ์ „์ฒด ๋กœ๊ทธ ์„ค์ •์„ ๋ฐ”๊พธ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํŒจํ‚ค์ง€์˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜๋„๋ก ํ•˜์ž. ๋กœ๊ทธ ์ถœ๋ ฅ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ '๋กœ๊ทธ ๋ ˆ๋ฒจ'๊ณผ '๋กœ๊ทธ ๋ฉ”์‹œ์ง€'๋งŒ ์ ๊ฒ ๋‹ค.

๋กœ๊ทธ ๋ ˆ๋ฒจ์ด TRACE์ธ ๊ฒฝ์šฐ

# ํŒŒ์ผ : application.properties
# ์ „์ฒด ๋กœ๊ทธ ๋ ˆ๋ฒจ(๊ธฐ๋ณธ ๊ฐ’)
logging.level.root=info
# ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •
logging.level.hello.springmvc=trace;
@Slf4j
@RestController
public class LogTestController {

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

        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";
    }
}
TRACE : trace log=amenable
DEBUG : debug log=amenable
INFO : info log=amenable
WARN : warn log=amenable
ERROR : error log=amenable

๋กœ๊ทธ ๋ ˆ๋ฒจ์ด ERROR์ธ ๊ฒฝ์šฐ

# ํŒŒ์ผ : application.properties
# ์ „์ฒด ๋กœ๊ทธ ๋ ˆ๋ฒจ(๊ธฐ๋ณธ ๊ฐ’)
logging.level.root=info
# ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •
logging.level.hello.springmvc=error;
ERROR : error log=amenable

 

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ๋Š” debug๋กœ ์„ค์ •ํ•˜๊ณ  ์šด์˜ ์„œ๋ฒ„์—์„œ๋Š” info๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

4. ์˜ฌ๋ฐ”๋ฅธ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ• ๐Ÿ‘จ‍โš–๏ธ

@Slf4j
@RestController
public class LogTestController {

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

        // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ•
        log.info("info log="+name);
        // ์˜ฌ๋ฐ”๋ฅธ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ•
        log.info("info log={}", name);

        return "ok";
    }
}

์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ•

  log.debug("data="+data)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

  1. log.debug("data="+"spring")
  2. log.debug("data=spring")
  3. ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ํ™•์ธ ํ›„ ์ถœ๋ ฅ

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

  log.debug("data={}", data)๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นœ๋‹ค.

  1. ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ํ™•์ธ ํ›„ ์ถœ๋ ฅ

  ๋งŒ์•ฝ ๋กœ๊ทธ ๋ ˆ๋ฒจ์ด INFO์˜€๋‹ค๋ฉด '์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ•'์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์ด ์ง„ํ–‰๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ '์˜ฌ๋ฐ”๋ฅธ ๋กœ๊ทธ ์‚ฌ์šฉ๋ฒ•'์„ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

 

5. ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ  ๐Ÿ‘จ‍๐Ÿ”ฌ

  ์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ดค๋˜ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

 

ํ•ด๋‹น ๊ธ€์€ ๊น€์˜ํ•œ ๋‹˜์˜ '์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ '์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.