Spring boot - ๋ก๊น [ ์คํ๋ง ๋ก๊ทธ๋จ๊ธฐ๊ธฐ ]
์คํ๋ง ๋ถํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ ์ผ๋ก ์ถ๊ฐ๋๋ค.
๋ก๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ข ๋ฅ๊ฐ ๋ง์๋ฐ ๊ทธ๊ฒ์ ํตํฉ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ก ์ ๊ณตํ๋ ๊ฒ์ด SLF4J ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ค๋ฌด์์๋ Logback์ ๋๋ถ๋ถ ์ฌ์ฉํ๋ค.
๐ฌ ๋ก๊ทธ ์ ์ธ ๋ฐฉ๋ฒ
// 1๋ฒ ๋ฐฉ๋ฒ
private Logger log = LoggerFactory.getLogger(getClass());
// 2๋ฒ ๋ฐฉ๋ฒ
private static final Logger log = LoggerFactory.getLogger(Xxx.class);
//3๋ฒ ๋ฐฉ๋ฒ ์ ๋
ธํ
์ด์
์ฌ์ฉ(lombok์ด ์ ๊ณต)
@Slf4j
โ ์ฒซ๋ฒ์งธ ๋ ๋ฒ์งธ ๋ก๊ทธ ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
๋ก๊ทธ๋ slf4j๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
๐ ๋ก๊ทธ ์ฌ์ฉ ๋ฐฉ๋ฒ
@Slf4j // lombok์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ (= private final Logger log = LoggerFactory.getLogger(getClass()); )
@RestController
public class LogTestController {
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
System.out.println("name = " + name);
// ๋ ๋ฒจ ํ์ธ
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";
}
}
1. @RestController
@Controller ๋์ ์ @RestController๋ฅผ ๋์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์๋ค.
๐ @Controller๋ ๋ฐํ ๊ฐ์ด String์ด๋ฉด view์ด๋ฆ์ผ๋ก ์๊ณ view๋ฅผ ๋ฐํํ๊ณ ๋ ๋๋ง ํ๋ค.
๐ @RestController๋ ๋ฐํ ๊ฐ์ด String์ด์ด๋ ๊ทธ๋ฅ String์ด ๋ฐํ๋๋ค. ๋ฐ๋ผ์ ์์ ์์์ฒ๋ผ return "ok"; ๋ผ๊ณ ์ ๋ ฅํด๋ ํ๋ฉด์ ok๋ผ๊ณ ํ์๋๋ค.
2. ๋ก๊ทธ ๋ ๋ฒจ
ERROR |
WARN |
INFO |
DEBUG |
TRACE |
๋ก๊ทธ ๋ ๋ฒจ์ TRACE > DEBUG > INFO > WARN > ERROR์ด๋ค.
3. ๋ก๊ทธ ํฌ๋งท ํ์ธ
๐ 2021-08-12 21:52:18.003 : ์๊ฐ
๐ INFO : ๋ก๊ทธ ๋ ๋ฒจ
๐ 21200 : ํ๋ก์ธ์ค ID
๐ [nio-8080-exec-1] : ์ฐ๋ ๋ ์ ๋ณด
๐ hello.springmvc.basic.LogTestController : ์ปจํธ๋กค๋ฌ ์ด๋ฆ, ํด๋์ค ์ด๋ฆ
๐ info log=Spring : ๋ฉ์์ง
4. ๋ก๊ทธ ๋ ๋ฒจ ์ค์
๋ก๊ทธ ๋ ๋ฒจ์ ๊ธฐ๋ณธ์ ์ผ๋ก info๋ก ์ค์ ๋์ด์๋ค.
๋ฐ๋ผ์ ๋ฐ๋ก ๋ก๊ทธ ๋ ๋ฒจ์ ์ค์ ํ์ง ์๋๋ค๋ฉด info, warn, error๋ง ์ฝ์ ์ฐฝ์ ์ถ๋ ฅ๋๋ค.
๋ก๊ทธ ๋ ๋ฒจ ๋ฒ์๋ฅผ ์กฐ์ ํ๊ณ ์ถ๋ค๋ฉด application.propertiesํ์ผ์ ๋ค์ด๊ฐ์ ๋ฐ๋ก ์ฝ๋๋ฅผ ์ ๋ ฅํด์ผ ํ๋ค.
โพ ์ ์ฒด ๋ก๊ทธ ๋ ๋ฒจ ์ค์
logging.level.root=(trace or debug or info or warn or error)
โพ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ์ถ์ ๋
logging.level.[Group๋ช
.Artifact๋ช
]=trace
// ๋ด๊ฐ ์ฌ์ฉํ ์ฝ๋
logging.level.hello.spingmvc=trace
โพ DEBUG ๋ฐ์ผ๋ก ๋ชจ๋ ๋ณด๊ณ ์ถ์ ๋
logging.level.[Group๋ช
.Artifact๋ช
]=debug
์ด๋ ๊ฒ ํ๋ฉด debug๋ฅผ ํฌํจํ ํ์ ๋ ๋ฒจ์ ๋ก๊ทธ๊ฐ ๋ชจ๋ ์ถ๋ ฅ๋๋ค. (debug, info, warn, error)
โญ ๊ฐ๋ฐ ์๋ฒ์์๋ debug๋ก, ์ด์ ์๋ฒ์์๋ info ์ค์ ์ ๊ธฐ๋ณธ์ผ๋ก ๊ถ์ฅํ๋ค.
โ ์ฃผ์ํด์ผ ํ ์
โ
๋ก๊ทธ๋ฅผ System.out.println();์ผ๋ก ๋จ๊ธฐ๋ฉด ์ ๋ ์ ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ฒฝ์ฐ์ ์๊ด์์ด ๋งค๋ฒ ์ถ๋ ฅ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ญ๋น๊ฐ ์ฌํ๋ค.
โ
log.trace("trace log=" + name); ์ด๋ log.trace("trace log={}", name); ์ ๊ฐ์ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
ํ์ง๋ง, log.trace("trace log={}", name); ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค!!!
๋ง์ฝ ๋ก๊ทธ ๋ ๋ฒจ์ ๋ฒ์๋ฅผ debug๋ก ์ค์ ํ์ ๊ฒฝ์ฐ์ trace๋ ํ์ํ์ง ์๋ค. ํ์ง๋ง ์๋ฐ์์๋ + ์ฐ์ฐ์ ๋จผ์ ํ๊ฒ ์ค์ ๋์ด์๋ค. ๋ฐ๋ผ์ log.trace("trace log=" + name); ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ์๋, trace๋ฅผ ์ฌ์ฉํ์ง ์์์๋ ๋ถ๊ตฌํ๊ณ ์ฐ์ฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ชจ์๋ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ์ผ์ด๋๋ค. ๋ฐ๋ผ์ ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํ๋ค.
์ค๋ฅธ์ชฝ ๋ฐฉ์์ ๊ทธ๋ฅ ๋ฉ์๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฐ์ฐ์ ํ์ง ์๋๋ค.
๐ ๋ก๊ทธ ์ฌ์ฉ ์ฅ์
- ์ฐ๋ ๋ ์ ๋ณด, ํด๋์ค ์ด๋ฆ ๊ฐ์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ณ , ์ถ๋ ฅ ๋ชจ์์ ์กฐ์ ํ ์ ์๋ค.
- ๋ก๊ทธ ๋ ๋ฒจ์ ๋ฐ๋ผ ๊ฐ๋ฐ ์๋ฒ์์๋ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ด์์๋ฒ์์๋ ์ถ๋ ฅํ์ง ์๋ ๋ก๊ทธ ๋ฑ ์ํฉ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์๋ค.
- ์ฝ์์๋ง ์ถ๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ, ๋ก๊ทธ๋ฅผ ๋ณ๋์ ์์น์ ๋จ๊ธธ ์ ์๋ค.
- System.out ๋ณด๋ค ์ฑ๋ฅ์ด ํจ์ฌ ์ข๋ค.
์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ์ ๋จ๊ฒจ์ฃผ์ธ์!
โ ์คํ๋ง ๋ถํธ์์ ์ ๊ณตํ๋ ๋ก๊ทธ ๊ธฐ๋ฅ
์ด ํฌ์คํ ์ ์ธํ๋ฐ ๊น์ํ๋์ [์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ ]์ ๋ฃ๊ณ ์์ฑ๋ ๋ณต์ต ํฌ์คํ ์ ๋๋ค.