Java๐Ÿ”ฅ

Logging

hae02y 2023. 7. 26. 16:02
๋ฐ˜์‘ํ˜•

Logging

์šด์˜ ๋˜๋Š” ๊ฐœ๋ฐœ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ, ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋‹น์‹œ์˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ์œ„ํ•ด์„œ Logging์„ ์‚ฌ์šฉํ•œ๋‹ค. ์‚ฌ์ „์ ์ธ ์˜๋ฏธ๋กœ๋Š” "๊ธฐ๋กํ•˜๋Š” ํ–‰์œ„" ์ด๊ณ , ์ด๋Ÿฐ ํŒŒ์ผ๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฒƒ์„ LogํŒŒ์ผ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฒ„๊ทธ๋‚˜ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์„ฑ๋Šฅ์ด๋‚˜ ์žฅ์• ์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์œผ๋กœ ์ •์˜ ํ• ์ˆ˜์žˆ๊ฒ ๋‹ค.

 

์ž๋ฐ”์—์„œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€๊ธˆ๊นŒ์ง€๋Š” System.out.println() ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž!

 

System.out.println() ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 

1. ๋กœ๊น…๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋‚ฎ๋‹ค.

2. ๋‚ ์งœ, ์‹œ๊ฐ„, ๋ ˆ๋ฒจ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์ž‘์„ฑํ•ด์•ผ ๋œ๋‹ค.

3. ์ฝ˜์†”์ฐฝ์—๋งŒ ์ถœ๋ ฅ๋˜์–ด ์ ‘๊ทผ์ด ํž˜๋“ค๋‹ค.

4. ์›ํ•˜๋Š” ์œ„์น˜์— ๋‚จ๊ธธ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

 

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

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

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋กœ๊ทธ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์—ฌ๋ผ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ํ†ตํ•ฉํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด SLF4J๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ฆ‰, SLF4J์˜ ๊ตฌํ˜„์ฒด๋กœ Logback๋“ฑ์˜ ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ  ์ด๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฒƒ์ด๋‹ค

 

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

@RestController
public class LogTestController {
 private final Logger log = LoggerFactory.getLogger(getClass());  //๋กœ๊ทธ์„ ์–ธ
 private static final Logger log = LoggerFactory.getLogger(LogTestController.class) //์ด๋Ÿฐ๋ฐฉ์‹๋„ ๊ฐ€๋Šฅ
 
 @RequestMapping("/log")
 public String log() {
 	String name = "hi";
     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";
 }
}

์ด๋ ‡๊ฒŒ ์ง์ ‘ Logger๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ฐ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ์•„๋ž˜ ๋ฐฉ๋ฒ•์„ ์“ฐ๋ฉด ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋‹ค.

@Slf4j  //์„ ์–ธ
@RestController
public class LogTestController {
 
 @RequestMapping("/log")
 public String log() {
 	String name = "hi";
     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";
 }
}

๋กœ๊ทธ์ž‘์„ฑ์‹œ์—๋Š” ์œ„์™€๊ฐ™์ด "{}"๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‰ผํ‘œ๋’ค์— ๋ณ€์ˆ˜๋ช…์„ ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

 

๋กœ๊ทธ์˜ ์ถœ๋ ฅ ํฌ๋งท์„ ๋ณด๋ฉด ์•ž์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ

์‹œ๊ฐ„, ๋กœ๊ทธ ๋ ˆ๋ฒจ, ํ”„๋กœ์„ธ์ŠคID, thread์ด๋ฆ„, Class์ด๋ฆ„, ๋กœ๊ทธ๋ฉ”์„ธ์ง€ ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

๋กœ๊ทธ์˜ Level

๋กœ๊ทธ์˜ ๋ ˆ๋ฒจ์€

  • TRACE : ์ „๋ถ€๋‹ค ์ฐํžŒ๋‹ค.
  • DEBUG : ๊ฐœ๋ฐœ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ
  • INFO : ์šด์˜์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ
  • WARN
  • ERROR

์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

๋ฐ˜์‘ํ˜•