Logging - f-lab-edu/practice-mall GitHub Wiki
๋ก๊ทธ(Log)
๋ก๊ทธ(log) : ์ฐ์๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ก, ์ฆ ์ค์ ์ด์์ ํ๋ฉด์ ๋จ๊ธฐ๊ณ ์ํ๋ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค.
๋ก๊น (logging) : ๊ธฐ๋กํ๋ ๊ฒ
๋ก๊น ๋ ๋ฒจ
๋ก๊ทธ ๋ ๋ฒจ ์ค์ ์ ๋ณ๊ฒฝํด์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅด๊ฒ ๋ํ๋ผ ์ ์๋ค.
๋ก๊น ํ๋ ๋ฐฉ๋ฒ
- system.out.print()
System.out.print์ ๊ฒฝ์ฐ ๋ก๊ทธ๊ฐ ํ์ค์ผ๋ก ์ถ๋ ฅ๋๋ค. ํ์ง๋ง ์ด๋ฅผ ์ฐ์ง ์๊ณ ๋ก๊น ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์๋ ๋ค์ํ ์ด์ ๊ฐ ์๋ค.
[์ด์ 1.]๋ก๊ทธ ๋ด์ฉ์ด ํ๋ฐ์ฑ์ด๋ค.
- ๋ก๊ทธ๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ํฉ์ ๊ธฐ๋กํ์ฌ ์ดํ ๋ฌธ์ ๋ฅผ ์ง๋จํ๊ณ ๊ณ ์น๊ธฐ ์ํด ์ฌ์ฉ๋๋๋ฐ system.out.print ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ธํ ๋ก๊ทธ๊ฐ ํ์ผ๋ก ์ ์ฅ๋์ง ์๋๋ค.
- ๋ก๊ทธ ๋ด์ฉ์ ์ ์ฅํ์ง ์๊ธฐ์ ๋ก๊ทธ๊ฐ ๋ฐ์ํ ๋ ์ง, ์๊ฐ, ๋ก๊ทธ ๋ฐ์์์น๋ฑ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ๋ชปํ๋ค.
[์ด์ 2.]๋ก๊ทธ ๋ ๋ฒจ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ์๋ฌ๊ฐ ๋ฐ์ํ ๋ ์ํฉ์ ๋ฐ๋ฅธ ๋ฌธ์ ์ ๋ํ ๋ก๊ทธ์ถ๋ ฅ ๋ ๋ฒจ์ ์ฌ์ฉํ ์ ์๋ค. ๋ก๊ทธ ์ถ๋ ฅ ๋ ๋ฒจ์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ถ๋ถ๋ง ๋ก๊ทธ๋ฅผ ํ์ธํด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผํ๋๋ฐ (์๋ฏธ์๋ ๋ก๊ทธ๋ค์ด ์์ฌ ์๋ฒ์ฉ๋์ ๋ฌธ์ ๋ ๋ฐ์) System.out.print์ ์ด๋ฌํ ๋ก๊ทธ ์ถ๋ ฅ ๋ ๋ฒจ์ ๋ฐ๋ฅธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ง์ํด์ผ ํ๋ค.
[์ด์ 3.]์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๋ค.
- System.out.println์ฌ์ฉํ๋ฉด println ๋ฉ์๋ ์์ synchronized ํค์๋๊ฐ ์๋ค. ์ด๋ ๋๊ธฐํ๋ก ํ๋์ ์ฐ๋ ๋๊ฐ ์๋ฃ๋์ด์ผ์ง ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ฌ๋ฌ ์ฐ๋ ๋๋ค์ด ๋์์ ์ ๊ทผ์ ํ๊ฒ ๋๋ฉด ํ๋์ ์ฐ๋ ๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผํ๋ ์ํ์ ๋์ด๊ฒ ๋๋ค. ์ด ๊ณผ์ ์์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ์ฌ ํ๋ก์ธ์ค ์ฒ๋ฆฌ๊ฐ ๋ฆ์ด์ง๊ฒ ๋์ด ์ดํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ด ์ ํ๊ฐ ๋ ์ ์๋ค.
- java.util.logging.Logger
jdk1.4 ๋ถํฐ ์๊ธด ๊ฒ์ผ๋ก Log4J ๋ก๊น ํ๋ ์์ํฌ ์ดํ๋ก ๊ฐ๋ฐ๋ ๊ฒ์ด๋ค. ์ด๋ Log4J ์ ๋ก๊น ๋ ๋ฒจ์ด ๋ค๋ฅด๋ค. java์ธ์ด์ java.util.logging ํจํค์ง์ ์ํด์๋ ๋ก๊น ์ฉ ์ ํธ ํด๋์ค๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ด ํ์ ์์ผ๋ฉฐ ํ์ผ์ด๋ ์ฝ์์ ๋ก๊ทธ ๋ด์ฉ์ ์ถ๋ ฅํ ์ ์๋ค.
7๊ฐ๋ก ๋ถ๋ฆฌ๋ Level๋ณ๋ก ๋ก๊ทธ๋ฅผ ์ง์ํ๋ค.
๋ก๊ทธ๋ ๋ฒจ | ์ค๋ช |
---|---|
ALL | ๋ชจ๋ ๋ฉ์ธ์ง๋ฅผ ๊ธฐ๋กํด์ผํจ์ ๋ํ๋ |
CONFIG | ์ ์ ๊ตฌ์ฑ ๋ฉ์ธ์ง์ ๋ํด ๊ธฐ๋ก |
FINE | ์ถ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฉ์ธ์ง |
FINER | ์์ธํ ์ถ์ ๋ฉ์ธ์ง Debug |
FINEST | |
INFO | ์ ๋ณด ์ฐจ์์ผ๋ก ์ ๊ณต๋๋ ๋ฉ์ธ์ง |
OFF | ๋ก๊น ์ ๋๋ ๊ธฐ๋ฅ |
SEVERE | ์ฌ๊ฐํ ์คํจ๋ฅผ ๋ํ๋ด๋ ๋ฉ์ธ์ง |
WARNING | ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ํ๋ด๋ ๋ฉ์ธ์ง |
- ์ฅ์ : ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์์ด ๋ก๊น
- ๋จ์ : ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๊ตํ์ ๋ ์๋๊ฐ ๋๋ฆฌ๋ค**(!ํ์ธ์ด ํ์!)**
- Log4J, log4j2
Apache ์ java๊ธฐ๋ฐ ๋ก๊น ํ๋ ์์ํฌ
Log4J ์ ๊ตฌ์ฑ
Log4J๋ฅผ ๊ฐ์ ํด์ ๋์จ ๊ฒ์ด log4j2
- Logback
- log4j ๋ณด๋ค ํฅ์๋๊ณ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ Java ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- slf4j์ ๊ตฌํ์ฒด๋ก์จ SpringBoot์ ๊ธฐ๋ณธ log๋ก ์ฌ์ฉ spring-boot-starter-web์์ spring-boot-starter-logging์ logback์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด ์์ด์ ๋ณ๋ค๋ฅธ dependency ์ถ๊ฐ ์์ด ์ฌ์ฉํ ์ ์๋ค.
- 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๋ฑ )๋ก ๋ค์ํ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํด ํ์ฉํ ์ ์์ผ๋ฏ๋ก ์ ํ