๐[Java] ์์ธ์ฒ๋ฆฌ ๋ก๊ทธ ๋ฐฉ์
์์ธ์ฒ๋ฆฌ ์ ๋ก๊ทธ ๋จ๊ธฐ๊ธฐ
์๋น์ค๋ฅผ ๊ตฌํํ๋ค๋ณด๋ฉด ์ฌ๋ฌ ์ค๋ฅ์ ๋ถ๋ชํ๋ค.
์ด ๋, ์์ธ์ฒ๋ฆฌ
๋ฅผ ์งํํ๋ค๋ฉด ์ด๋ค ๋ถ๋ถ์์ ์ด๋ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ธ์ง ์ฝ๊ฒ ํ์
ํ ์ ์๋ค.
์ธํด ๊ธฐ๊ฐ๋์ ์งํํ ํ๋ก์ ํธ์์๋ org.slf4j.Logger
, org.slf4j.LoggerFactory
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
์ด ์ธ์๋ java.util.logging
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ๋ค.
๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ธ ์ ํธ๋ ์ฐจ์ด์ง๋ง, slf4j
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ logging
์ ๋นํด ๋ก๊น
์ ๋ํ ์ ์ฐ์ฑ์ด ํฌ๊ณ , ๋ค์ํ ๋ฐฑ์๋๋ฅผ ์ง์ํ๋ ๋ฑ์ ํน์ง ๋๋ถ์ ๋ง์ ํ๋ก์ ํธ์์ ์ ํธํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ํ๋ค.
์ด๋์ ์ฌ์ฉํ์ง?
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ Logger๋ฅผ ์ด๋์ ์ฌ์ฉํ๋์ง ์ ์ ๊ฐ๋ฐ์๋ถ๋ค์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ฌ ์ ์ ์์๋ค.
๋จผ์ , Logger
๋ฅผ ์ ์ธํด์ค์ผ ํ๋ค.
Logger log = LoggerFactory.getLogger(ProductController.class);
[์์ 1]
/**
* product ์์ (Update) Controller
*/
@ResponseBody
@RequestMapping("update")
public String update(ProductVO voData, HttpSession session) {
String resultCode = "success";
// update
try {
productService.updateProduct(voData);
} catch (Exception e) {
log.error("update product failed.", e);
resultCode = "failed";
}
return resultCode;
}
์์ ๊ฐ์ ์์์์ ๋ณด๋ฉด, ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ๋ถ๋ถ์ try ~ catch ๊ตฌ๋ฌธ
๋ฐ์์ ์งํํ๊ณ Service(Impl)
์ ์ ๊ทผํ๋ ๋ก์ง๋ถํฐ๋ try ~ catch ๊ตฌ๋ฌธ
์ผ๋ก ๊ฐ์ธ๊ณ ์๋ค.
Logger๋ try ~ catch ๊ตฌ๋ฌธ์์ ์ฌ์ฉํ๋ฉฐ, catch(Exception e)
์ ๊ฐ์ด ์์ธ๊ฐ ๋ฐ์ํ๋ฉด Exception
์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
์ด ๋, log.error()
๋ฉ์๋์ ์์ธ์ฒ๋ฆฌ ๋ณ์๋ฅผ ๋ฃ์ด์ฃผ์ด ์์ธ ์ํฉ์ ๋ก๊ทธ(log)๋ก ์ ์ ์๋ค.
[์์ 2]
/**
* product ์์ (Update) Controller
*/
@ResponseBody
@RequestMapping("update")
public String update(ProductVO voData, HttpSession session) {
String resultCode = "success";
// update
try {
productService.updateProduct(voData);
} catch (Exception e) {
e.printStackTrace();
resultCode = "failed";
}
return resultCode;
}
์์์๋ log.error()
๊ฐ ์๋ e.printStackTrace()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์์ธ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
์ด ๋์ ์ฐจ์ด์ ์ ๋ญ๊น?
log.error() vs e.printStackTrace()
log.error()
๋ ๋ง ๊ทธ๋๋ก error ๋ฐ์ ์, ์ฝ์์ ๋ก๊ทธ๋ฅผ ์ฐ์ด์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ฌ๊ธฐ์๋ log.error()
๋ง ์ฌ์ฉํ๋๋ฐ, ์ด ๋ฉ์๋๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ฝ์์ ์ฐ์ด์ฃผ๋ ๋ฐฉ์์ด๋ค.
log ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๊ทธ๋ ๋ฒจ
์ ํตํด ์ํ๋ ์์ค์ ๋ก๊ทธ๊น์ง๋ง ๋ณผ ์ ์๋ค.
e.printStackTrace()
๋ ์๋ฌ์ ๋ฐ์ ๊ทผ์์ง๋ฅผ ์ฐพ์ ๋จ๊ณ๋ณ๋ก ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ ๊ฐ๋ฐ์๊ฐ ์ํฉ์ ๋ถ์ํ๊ธฐ ์ข๊ฒ ๋์์ฃผ๋ ์ญํ ์ ํ๋ ค ๋๋ฒ๊น
์ ํ ์ ์๋ ํํธ๋ฅผ ์ ๊ณตํ๋ค.
ํ์ง๋ง, e.printStackTrace()
๋ฅผ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋๋ฐ ์ ๊ทธ๋ด๊น?
์ e.printStackTrace() ์ง์ํ๋ ๊ฒ์ด ์ข์๊น?
- printStackTrace()๋ฅผ callํ ๊ฒฝ์ฐ System.err๋ก ์ฐ์ฌ์ ธ ์ ์ด๊ฐ ํ๋ค๋ค.
- printStackTrace()๋ java ๋ฆฌํ๋ ์
์ ์ฌ์ฉํ์ฌ ์ถ์ ํ๋ ๊ฒ ->
๋ง์ ์ค๋ฒํค๋
๋ฐ์ ๊ฐ๋ฅ. - printStackTrace()๋ ์๋ฒ์์ ์คํ์ ๋ณด๋ฅผ ์ทจํฉํ๊ธฐ ๋๋ฌธ์
์๋ฒ์ ๋ถํ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ
์ด ์์. - printStackTrace()๋
์ถ๋ ฅ์ด ์ด๋๋ก ๊ฐ๋์ง ํ์ ์ด ์ด๋ ค์
.(tomcat์ ๊ฒฝ์ฐ catalina.out์ ๋จ์)
์ฑ๋ฅ์ ์ค์ํ๊ฒ ์ฌ๊ธฐ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด e.printStackTrace()๋ ํผํ๋ ๊ฒ์ด ์ข๋ค.
์ฐธ๊ณ ์๋ฃ
https://developsd.tistory.com/132
์ด์ ํ๊ฒฝ์์ ์ค๋ฅ ๊ฒ์ถํ๊ธฐ [Log, Logging ๊ฐ์, Log์ ํน์ง]
๋๊ธ๋จ๊ธฐ๊ธฐ