package egovframework.rte.fdl.logging;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.jdbc.JdbcTestUtils;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath*:META-INF/spring/context-common.xml",
"classpath*:META-INF/spring/context-datasource.xml",
"classpath*:META-INF/spring/context-connectionFactory.xml"})
public class AdvancedLogTargetTest {
@Resource(name = "dataSource")
DataSource dataSource;
@Value("#{jdbcProperties['usingDBMS']}")
private String usingDBMS;
@Before
public void onSetUp() throws Exception {
JdbcTestUtils.executeSqlScript(new JdbcTemplate(dataSource), new ClassPathResource("META-INF/testdata/dialect/" + usingDBMS + ".sql"), true);
}
/**
* 아래는 JDBCAppender를 테스트하는 메소드
* logger: level=ERROR, appender=JDBC, tableName=db_log
* */
@Test
public void testJDBCAppender() {
Logger logger = LogManager.getLogger("dbLogger");
// 로그 출력
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
// 로그 확인
// db_log 테이블에 저장된 로그 조회
String sql = "SELECT * FROM db_log";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// error레벨 이상 로그만 출력되므로 error, fatal 로그만 저장됨
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql);
assertEquals(2, resultList.size());
for(Map<String, Object> result : resultList) {
// db_log 테이블에 저장된 로그를 콘솔에 출력
LogManager.getLogger("egovframework").debug(result);
}
// 저장된 error, fatal 로그의 각 컬럼 확인
assertEquals("ERROR", resultList.get(0).get("level"));
assertEquals("dbLogger", resultList.get(0).get("logger"));
assertEquals("error", resultList.get(0).get("message"));
assertEquals("FATAL", resultList.get(1).get("level"));
assertEquals("dbLogger", resultList.get(1).get("logger"));
assertEquals("fatal", resultList.get(1).get("message"));
}
}