Logging - f-lab-edu/practice-mall GitHub Wiki

๋กœ๊ทธ(Log)

๋กœ๊ทธ(log) : ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ก, ์ฆ‰ ์‹ค์ œ ์šด์˜์„ ํ•˜๋ฉด์„œ ๋‚จ๊ธฐ๊ณ ์žํ•˜๋Š” ๊ธฐ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•œ๋‹ค.

๋กœ๊น…(logging) : ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ


๋กœ๊น…๋ ˆ๋ฒจ

๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์„œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


๋กœ๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. system.out.print()

System.out.print์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ๊ฐ€ ํ‘œ์ค€์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์—๋Š” ๋‹ค์–‘ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

[์ด์œ 1.]๋กœ๊ทธ ๋‚ด์šฉ์ด ํœ˜๋ฐœ์„ฑ์ด๋‹ค.

  • ๋กœ๊ทธ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํ™ฉ์„ ๊ธฐ๋กํ•˜์—ฌ ์ดํ›„ ๋ฌธ์ œ๋ฅผ ์ง€๋‹จํ•˜๊ณ  ๊ณ ์น˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ system.out.print ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ™•์ธํ•œ ๋กœ๊ทธ๊ฐ€ ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋กœ๊ทธ ๋‚ด์šฉ์„ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ์— ๋กœ๊ทธ๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์งœ, ์‹œ๊ฐ„, ๋กœ๊ทธ ๋ฐœ์ƒ์œ„์น˜๋“ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค.

[์ด์œ 2.]๋กœ๊ทธ ๋ ˆ๋ฒจ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

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

[์ด์œ 3.]์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • System.out.println์‚ฌ์šฉํ•˜๋ฉด println ๋ฉ”์†Œ๋“œ ์•ˆ์— synchronized ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ๋™๊ธฐํ™”๋กœ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ์ง€ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋“ค์ด ๋™์‹œ์— ์ ‘๊ทผ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋Š” ์ƒํƒœ์— ๋†“์ด๊ฒŒ ๋œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ๊ฐ€ ๋Šฆ์–ด์ง€๊ฒŒ ๋˜์–ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  1. java.util.logging.Logger

jdk1.4 ๋ถ€ํ„ฐ ์ƒ๊ธด ๊ฒƒ์œผ๋กœ Log4J ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ ์ดํ›„๋กœ ๊ฐœ๋ฐœ๋œ ๊ฒƒ์ด๋‹ค. ์ด๋Š” Log4J ์™€ ๋กœ๊น…๋ ˆ๋ฒจ์ด ๋‹ค๋ฅด๋‹ค. java์–ธ์–ด์˜ java.util.logging ํŒจํ‚ค์ง€์— ์†ํ•ด์žˆ๋Š” ๋กœ๊น…์šฉ ์œ ํ‹ธ ํด๋ž˜์Šค๋กœ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ด ํ•„์š” ์—†์œผ๋ฉฐ ํŒŒ์ผ์ด๋‚˜ ์ฝ˜์†”์— ๋กœ๊ทธ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

7๊ฐœ๋กœ ๋ถ„๋ฆฌ๋œ Level๋ณ„๋กœ ๋กœ๊ทธ๋ฅผ ์ง€์›ํ•œ๋‹ค.

๋กœ๊ทธ๋ ˆ๋ฒจ ์„ค๋ช…
ALL ๋ชจ๋“  ๋ฉ”์„ธ์ง€๋ฅผ ๊ธฐ๋กํ•ด์•ผํ•จ์„ ๋‚˜ํƒ€๋ƒ„
CONFIG ์ •์ ๊ตฌ์„ฑ ๋ฉ”์„ธ์ง€์— ๋Œ€ํ•ด ๊ธฐ๋ก
FINE ์ถ”์  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„ธ์ง€
FINER ์ž์„ธํ•œ ์ถ”์  ๋ฉ”์„ธ์ง€ Debug
FINEST
INFO ์ •๋ณด ์ฐจ์›์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฉ”์„ธ์ง€
OFF ๋กœ๊น…์„ ๋„๋Š” ๊ธฐ๋Šฅ
SEVERE ์‹ฌ๊ฐํ•œ ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์„ธ์ง€
WARNING ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์„ธ์ง€
  • ์žฅ์  : ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์—†์ด ๋กœ๊น…
  • ๋‹จ์  : ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค**(!ํ™•์ธ์ด ํ•„์š”!)**
  1. Log4J, log4j2

Apache ์˜ java๊ธฐ๋ฐ˜ ๋กœ๊น…ํ”„๋ ˆ์ž„์›Œํฌ

Log4J ์˜ ๊ตฌ์„ฑ

Log4J๋ฅผ ๊ฐœ์„ ํ•ด์„œ ๋‚˜์˜จ ๊ฒƒ์ด log4j2

  1. Logback
  • log4j ๋ณด๋‹ค ํ–ฅ์ƒ๋˜๊ณ  ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” Java ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • slf4j์˜ ๊ตฌํ˜„์ฒด๋กœ์จ SpringBoot์˜ ๊ธฐ๋ณธ log๋กœ ์‚ฌ์šฉ spring-boot-starter-web์•ˆ์— spring-boot-starter-logging์˜ logback์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ๋ณ„๋‹ค๋ฅธ dependency ์ถ”๊ฐ€ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  1. SLF4j

Simple Logging Facade for Java ๋Š” ava.util.logging, logback ๋ฐ log4j์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋กœ๊น… ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค) ์—ญํ• ์„ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

logger์˜ ์ถ”์ƒ์ฒด๋กœ์จ, ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฏ€๋กœ SLF4j ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ๊น…ํ•˜๊ฒŒ ๋˜๋ฉด ๊ตฌํ˜„์ฒด๋งŒ ๊ฐˆ์•„ ๋ผ์šฐ๋ฉด logback์ด๋‚˜ log4j๋“ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌํ˜„์ฒด๋กœ๋Š” logback, log4j2 ๋“ฑ

์—ฌ๋Ÿฌ ๋กœ๊น…ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์คŒ ๋ธŒ๋ฆฟ์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณต (SLF4j๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•จ)

๋กœ๊ทธ๋ ˆ๋ฒจ ์„ค๋ช…
FATAL ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊บผ์งˆ ์ˆ˜ ์žˆ๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜ ๋กœ๊ทธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ €์žฅ์ด ์•ˆ๋  ์ˆ˜ ์žˆ์Œ
ERROR ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ณ„์† ์‹คํ–‰๋˜์ง€๋งŒ, ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜
WARN ๋‹น์žฅ ํ”ผํ•ด๋Š” ์—†์ง€๋งŒ, ์ž ์žฌ์ ์œผ๋กœ ์œ„ํ—˜์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 
INFO ํ”„๋กœ๊ทธ๋žจ์˜ ์ง„ํ–‰์ƒํ™ฉ์„ ์•Œ๋ ค์ฃผ๋Š” ์ •๋ณด์„ฑ ๋กœ๊ทธ๋ ˆ๋ฒจ
DEBUG ์ž์„ธํ•œ ์ง„๋‹จ ์ •๋ณด๋ฅผ ์•Œ๋ ค์คŒ
TRACE DEBUG๋ณด๋‹ค ๋” ์ž์„ธํ•˜๋ฉฐ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฌธ์ œํ•ด๊ฒฐ์„ ํ™•์ธํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
[!]์„ค์ •ํ•œ ๋ ˆ๋ฒจ์— ํ•˜์œ„๋ ˆ๋ฒจ์€ ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด INFO ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜๋ฉด FATAL,ERROR,WARN ๋กœ๊ทธ๋ ˆ๋ฒจ๋งŒ ๊ธฐ๋ก

java.util.logging vs log4j


-> ์ตœ์ข… SLF4J๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•จ

[!์ด์œ ] System.out.println() ์˜ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋กœ๊น…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ java.util.logging ๋˜๋Š” Slf4j ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ Slf4j๋Š” ์ธํ„ฐํŽ˜์ด์Šค(๋กœ๊น…ํ”„๋ ˆ์ž„์›Œํฌ:logback, log4j2๋“ฑ )๋กœ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ ํƒ

logback.yaml