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๊ฐ ์ค์ ์คํ์ด ๋์ด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฌธ์ ๋ํ๊ธฐ ์ฐ์ฐ์ด ๋ฐ์ํฉ๋๋ค.
์ค๋ฌด์์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์๋ง์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์ธ๋ฐ์๋ ์ฐ์ฐ์ ํด์ ์์์ ๋ญ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์ผ ํฉ๋๋ค.
'๐ Backend > MVC Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422