- ๊ด๋ จ๊ธ
- [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ
- MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ
- MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ
MyBatis์ Log4J ์ฐ๋ํ๊ธฐ
MyBatis์ log4j๋ฅผ ์ฐ๋ํ์ฌ MyBatis์ ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
MyBatis์ ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด MyBatis์์ ์คํํ๋ SQL๋ฌธ, ํ๋ผ๋ฏธํฐ ๊ฐ, ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ค.
ํนํ ๋์ SQL๋ฌธ์ด ์คํ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง ํ์ธํ ์ ์์ด ๋๋ฒ๊น ์ ๋งค์ฐ ์ ์ฉํ๋ค.
1. MyBatis ์ค์
MyBatis ์ค์ ํ์ผ์ ๋ก๊ทธ ์ถ๋ ฅ ์ค์ ์ ์ถ๊ฐํ๋ค.
<configuration> ํ์์ <settings>๋ฅผ ์ถ๊ฐํ๊ณ <setting>์ ์ฌ์ฉํด์ ๋ก๊ทธ ์ถ๋ ฅ๊ธฐ๋ฅผ ์ง์ ํ๋ค.
MyBatis๋ ์ฌ๊ธฐ์ ์ง์ ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
์ด ์ค์ ์ ์ถ๊ฐํ์ง ์์ผ๋ฉด ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ๋์ํ์ง ์๋๋ค.
1) name ์์ฑ
name์ logImpl๋ก ์ง์ ํ๋ค.
2) value ์์ฑ
๋ก๊ทธ ์ถ๋ ฅ ๊ตฌํ์ฒด๋ฅผ ์ง์ ํ๋ค.
SLF4J, LOG4J, LOG4J2, JDK_LOGGING, COMMONS_LOGGING, STDOUT_LOGGING, NO_LOGGING๊ณผ Log ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํน์ ํด๋์ค๋ช ์ ์ง์ ํ ์ ์๋ค.
value ์์ฑ๊ฐ | ์ค๋ช |
SLF4J | SLF4J |
LOG4J | Log4j |
LOG4J2 | Log4j 2 |
JDK_LOGGING | JDK logging |
COMMONS_LOGGING | Apache Commons Logging |
STDOUT_LOGGING | ํ์ค ์ถ๋ ฅ ์ฅ์น๋ก ์ถ๋ ฅ |
NO_LOGGING | ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ ์ฌ์ฉ ์ํจ |
ํจํค์ง๋ช ์ ํฌํจํ ํด๋์ค๋ช | org.apache.ibatis.logging.Log ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด |
์ฌ๊ธฐ์๋ log4j๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก LOG4J๋ผ๊ณ ์ง์ ํ์๋ค.
2. Log4J ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค๋น
Log4j ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ MyBatis ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋์ด ์๋ค.
MyBatis๋ฅผ ์ธํ ํ ๋ ํ๋ก์ ํธ์ ์ด๋ฏธ ์ถ๊ฐํ์ ๊ฒ์ด๋ค.
ํ๋ก์ ํธ dependencies(Build path)์ log4j-x.x.x.jar๊ฐ ์๋์ง ํ์ธํด๋ณด๊ณ ์์ผ๋ฉด https://mvnrepository.com/artifact/log4j/log4j ์์ ๋ค์ด๋ฐ์ ์ถ๊ฐํ์.
3. Log4J ์ค์ ํ์ผ ์์ฑ
MyBatis์ ๋ก๊ทธ ์ถ๋ ฅ ์ค์ ์ ์ถ๊ฐํ๊ณ log4j ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค๋น๊ฐ ์๋ฃ๋์ผ๋ฉด ๋ง์ง๋ง์ผ๋ก log4j ์ค์ ํ์ผ์ ์์ฑํด์ผ ํ๋ค.
๋ก๊ทธ ๋ ๋ฒจ, ์ถ๋ ฅ ๋ฐฉ์, ์ถ๋ ฅ ํ์, ๋ก๊ทธ ๋์ ๋ฑ์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ค.
์๋ฐ ์์ค ํด๋(src) ํ์์ log4j.properties๋ฅผ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
log4j.properties
1
2
3
4
5
6
7
|
log4j.rootLogger=ERROR, stdout
log4j.logger.com.atoz_develop.spms.dao=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
|
cs |
1) ๋ก๊ทธ ๋ ๋ฒจ ์ค์ - rootLogger
๋จผ์ rootLogger = ์ต์์ ๋ก๊ฑฐ์ ๋ก๊ทธ ๋ ๋ฒจ์ ์ค์ ํ๋ค.
ํ์ ๋ก๊ฑฐ๋ค์ ํญ์ ๋ถ๋ชจ์ ๋ก๊ทธ ๋ ๋ฒจ์ ์์๋ฐ์์ ๋ณ๋๋ก ์ค์ ํ์ง ์์ผ๋ฉด rootLogger์ ๋ ๋ฒจ์ ๋๊ฐ์ด ๋ฐ๋ผ๊ฐ๋ค.
ํ - ๋ก๊ทธ ๋ ๋ฒจ
๋ก๊ทธ ๋ ๋ฒจ | ์ค๋ช |
FATAL | ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์งํด์ผ ํ ์ฌ๊ฐํ ์ค๋ฅ |
ERROR | ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ณ์ ์คํํ ์ ์๋ ์ํ |
WARN | ์ ์ฌ์ ์ธ ์ํ์ ๊ฐ๊ณ ์๋ ์ํ |
INFO | ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ์คํ ์ ๋ณด |
DEBUG | ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ถ ์คํ ์ํฉ์ ์ถ์ ํ ์ ์๋ ์์ธ ์ ๋ณด |
TRACE | DEBUG๋ณด๋ค ๋ ์์ธํ ์ ๋ณด |
๊ฐ ๋ ๋ฒจ์ ์ ๋ ๋ฒจ์ ํฌํจํด์ ERROR๋ก ์ค์ ํ๋ฉด FATAL ๋ก๊ทธ๋ฅผ ํฌํจํด์ ์ถ๋ ฅํ๊ณ INFO๋ก ์ค์ ํ๋ฉด FATAL, ERROR, WARN ๋ก๊ทธ๋ฅผ ํฌํจํด์ ์ถ๋ ฅํ๋ค. ๋ฐ๋ผ์ TRACE๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
2) Appender(์ถ๋ ฅ ๋ด๋น์) ์ ์ธ
rootLogger์ ๋ก๊ทธ ๋ ๋ฒจ ์ค์ ๋ค์์๋ appender(์ถ๋ ฅ ๋ด๋น์)์ ์ด๋ฆ์ด ์จ๋ค. appender ์ด๋ฆ์ ๋ง์๋๋ก ์ง์ ํ ์ ์๊ณ ์ด๋ ๊ฒ ์ ์ธํ ์ด๋ฆ์ผ๋ก ๋ค์ ์ค์ ์์ appender๋ฅผ ์ ์ํ๋ค.
3) Appender(์ถ๋ ฅ ๋ด๋น์) ์ ์
Appender๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์
log4j.appender.stdout(appender ์ด๋ฆ)์ ๋ก๊ทธ๋ฅผ ์ด๋๋ก ์ถ๋ ฅํ ์ง,
log4j.appender.stdout.layout์๋ ๋ก๊ทธ ์ถ๋ ฅ ํ์์,
log4j.appender.stdout.layout.ConversionPattern์๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ ํจํด์ ์ ์ํ๋ค.
(1) ๋ก๊ทธ๋ฅผ ์ด๋๋ก ์ถ๋ ฅํ ๊ฒ์ธ๊ฐ
๋ก๊ทธ๋ฅผ ๊ธฐ๋ณธ ์ถ๋ ฅ ์ฅ์น์ธ ๋ชจ๋ํฐ๋ก ์ถ๋ ฅํ๊ฑฐ๋ ํ์ผ๋ก ์ถ๋ ฅํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ์ด์ฉํด์ ์๊ฒฉ์ ์๋ฒ๋ก ์ถ๋ ฅํ ์ ์๋ค.
์์ ๊ฐ์ด ConsoleAppender๋ก ์ค์ ํ๋ฉด ํ์ค ์ถ๋ ฅ = ๋ชจ๋ํฐ๋ก ์ถ๋ ฅํ๋ค.
์ฃผ์ ๋ก๊ทธ ์ถ๋ ฅ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
ํด๋์ค | ์ค๋ช |
org.apache.log4j.ConsoleAppender | ํ์ค ์ถ๋ ฅ ์ฅ์น์ธ ๋ชจ๋ํฐ๋ก ์ถ๋ ฅํ๋ค. System.out ๋๋ System.err๋ก ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค. ๊ธฐ๋ณธ์ System.out์ด๋ค. |
org.apache.log4j.FileAppender | ํ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค. |
org.apache.log4j.net.SocketAppender | ์๊ฒฉ ๋ก๊ทธ ์๋ฒ์ ๋ก๊ทธ ์ ๋ณด๋ฅผ ๋ด์ LoggingEvent ๊ฐ์ฒด๋ฅผ ๋ณด๋ธ๋ค. |
(2) ๋ก๊ทธ์ ์ถ๋ ฅ ํ์
๋ก๊ทธ๋ ๋ฌธ์์ด, XML, HTML ํ์์ด๋ ํน์ ํจํด์ผ๋ก ์ถ๋ ฅํ ์ ์๋ค.
์์ ๊ฐ์ด ์ค์ ํ๋ฉด ํน์ ํจํด ํ์์ ๋ฐ๋ผ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋๊ฒ์ด๋ค.
์ด ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ผ๋ก ConversionPattern ์ค์ ์ด ํ์ํ๋ค.
๋ค์์ ์ฃผ์ ์ถ๋ ฅ ํ์ ํด๋์ค์ด๋ค.
ํด๋์ค | ์ค๋ช |
org.apache.log4j.SimpleLayout | ๋ก๊ทธ ๋ ๋ฒจ - ๋ฉ์์ง ํ์ |
org.apache.log4j.HTMLLayout | HTML ํ ์ด๋ธ ํ์ |
org.apache.log4j.PatternLayout | ํจํด์ ๋ฐ๋ผ ๋ก๊ทธ ์ถ๋ ฅ |
org.apache.log4j.xml.XMLLayout | log4j.dtd ๊ท์น์ ๋ฐ๋ผ XML์ ๋ง๋ค์ด ์ถ๋ ฅ |
(3) ํจํด ์ ์
PatternLayout์์ ์ฌ์ฉํ ํจํด์ ์ ์ํ๋ค.
- %5p : ๋ก๊ทธ ๋ ๋ฒจ์ 5์๋ฆฌ ๋ฌธ์์ด๋ก ์ถ๋ ฅํ๋ผ
- %t : thread ์ด๋ฆ์ ์ถ๋ ฅํ๋ผ
- %m : ๋ก๊ทธ ๋ด์ฉ์ ์ถ๋ ฅํ๋ผ
- %n : ๋ค์ ํ
ConversionPattern์ ์ ์ํ๋ ๋ ์์ธํ ๋ฐฉ๋ฒ์ log4j ์ฌ์ดํธ http://logging.apache.org/log4j/ ๋ฅผ ์ฐธ๊ณ ํ์.
4) ํน์ ํจํค์ง์ ํด๋์ค์ ๋ํด ๋ก๊ทธ ๋ ๋ฒจ ์ค์
rootLogger์ ์ ์ํ ๋ฃจํธ ๋ ๋ฒจ๊ณผ ๋ค๋ฅธ ๋ ๋ฒจ์ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด ํ์ ๋ก๊ฑฐ๋ฅผ ์ ์ธํด์ ๋ก๊ทธ ๋ ๋ฒจ์ ์ง์ ํ๋ฉด ๋๋ค.
log4.logger ๋ค์์ ํจํค์ง ์ด๋ฆ์ ์ง์ ํ๊ณ ๋ก๊ทธ ๋ ๋ฒจ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
์์ ๊ฐ์ด์ค์ ํ๋ฉด com.atoz_develop.spms.dao ํจํค์ง ํ์์ ํด๋์ค์ ๋ํด ๋ก๊ทธ ๋ ๋ฒจ์ DEBUG๋ก ์ค์ ํ๋ค๋ ์๋ฏธ์ด๋ค.
4. ๋ก๊ทธ ์ถ๋ ฅ ํ ์คํธ
์๋ฒ๋ฅผ ๊ธฐ๋ํ๊ณ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋ค DB์ ์ฐ๋ํ๋ ๊ธฐ๋ฅ์ ์คํํด๋ณด์.
ํจํด์ ์ค์ ํ ํ์ ๋๋ก ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ฉฐ, MyBatis๊ฐ ์คํํ๋ SQL๋ฌธ๊ณผ ํ๋ผ๋ฏธํฐ, ๊ฒฐ๊ณผ๋ฅผ ์ด ๋ก๊ทธ๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
๋ก๊ทธ ๋ ๋ฒจ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด ์ ๋ถ๋ถ์ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
- ๊ด๋ จ๊ธ
- [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ
- MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ
- MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ
References
์ดํ๊ฐ์ ์๋ฐ ์น ๊ฐ๋ฐ ์ํฌ๋ถ(ํ๋ฆฌ๋ , 2016, ์์ง์)
'Javaยท๏ปฟServletยท๏ปฟJSP > LibraryยทFramework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA/Hibernate] persistence.xml ์ค์ ๋ฐฉ๋ฒ (6) | 2020.03.19 |
---|---|
MyBatis ๋์ SQL - <choose>์ <set>์ ์ฌ์ฉํ์ฌ ๋์ SQL ๋ง๋ค๊ธฐ (1) | 2020.02.26 |
MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ (0) | 2020.02.24 |
MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ (6) | 2020.02.23 |
[JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ (0) | 2020.02.23 |
๋๊ธ