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)๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ฉด์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.
- log.debug("data="+"spring")
- log.debug("data=spring")
- ๋ก๊ทธ ๋ ๋ฒจ์ ํ์ธ ํ ์ถ๋ ฅ
์ฌ๋ฐ๋ฅธ ๋ก๊ทธ ์ฌ์ฉ๋ฒ
log.debug("data={}", data)๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ค.
- ๋ก๊ทธ ๋ ๋ฒจ์ ํ์ธ ํ ์ถ๋ ฅ
๋ง์ฝ ๋ก๊ทธ ๋ ๋ฒจ์ด INFO์๋ค๋ฉด '์ฌ๋ฐ๋ฅด์ง ์์ ๋ก๊ทธ ์ฌ์ฉ๋ฒ'์์๋ ๋ถํ์ํ ์ฐ์ฐ์ด ์งํ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก '์ฌ๋ฐ๋ฅธ ๋ก๊ทธ ์ฌ์ฉ๋ฒ'์ ์ด์ฉํ์ฌ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ก ํ์.
5. ๋ก๊ทธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๐จ๐ฌ
์ง๊ธ๊น์ง ์ดํด๋ดค๋ ๋ด์ฉ๊ณผ ํจ๊ป ๋ก๊ทธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฐ๋ ๋ ์ ๋ณด, ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ํจ๊ป ๋ณผ ์ ์๊ณ , ์ถ๋ ฅ ๋ชจ์์ ์กฐ์ ํ ์ ์๋ค.
- ๋ก๊ทธ ๋ ๋ฒจ์ ๋ฐ๋ผ ๊ฐ๋ฐ ์๋ฒ์์๋ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ด์ ์๋ฒ์์๋ ์ถ๋ ฅํ์ง ์๋ ๋ฑ ๋ก๊ทธ๋ฅผ ์ํฉ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์๋ค.
- ์์คํ ์์ ์ฝ์์๋ง ์ถ๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ, ํ์ผ์ด๋ ๋คํธ์ํฌ ๋ฑ, ๋ก๊ทธ๋ฅผ ๋ณ๋์ ์์น์ ๋จ๊ธธ ์ ์๋ค. ํนํ ํ์ผ๋ก ๋จ๊ธธ ๋๋ ์ผ๋ณ, ํน์ ์ฉ๋์ ๋ฐ๋ผ ๋ก๊ทธ๋ฅผ ๋ถํ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
- ์ฑ๋ฅ๋ ์ผ๋ฐ System.out๋ณด๋ค ์ข๋ค. (๋ด๋ถ ๋ฒํผ๋ง, ๋ฉํฐ ์ฐ๋ ๋ ๋ฑ๋ฑ)
ํด๋น ๊ธ์ ๊น์ํ ๋์ '์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ '์ ์ฐธ๊ณ ํ์์ต๋๋ค.
'๐ ์คํ๋ง > ๊ธฐ๋ณธ ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP ์์ฒญ(ํค๋, ํ๋ผ๋ฏธํฐ, ๋ฉ์์ง) ์ฒ๋ฆฌ (0) | 2023.04.20 |
---|---|
์คํ๋ง MVC (0) | 2023.04.19 |
์์กด์ฑ ์ฃผ์ - DI(Dependency Injection) (0) | 2023.04.18 |
์์ฑ์ ์ฃผ์ ์ ์ ํํ๋ผ! (0) | 2023.04.07 |
์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ (0) | 2023.04.06 |