1. 로깅, 디버깅
// log도 레벨이 있음
// Trace
// Debug
// Info
// Warning
// Error
// Fatal
log.trace("이건 trace야~");
log.debug("이건 debug야~"); // resources > log4j.xml에 logger level을 debug로 바꾸면
// 출력을 찍을 수 있음(debug는 개발단계에서 사용)
log.info("이건 info야~"); // info아래만 찍힘
log.warn("이건 warn이야~");
log.error("이건 error야~");
pom.xml에 있는
log4j객체가 실행되면서 log를 찍어줌(?)
resources > log4j.xml에서 설정을 변경할 수 있음
(SpringBoot는 logback을 지원함)
파일로 내보낼 수도 있음
<!-- Appenders -->
<!-- 전달된 로그를 출력할 매체(콘솔, File, DB) -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<!-- name : appender이름(내맘대로 짓는거) / class : 출력할 형식에 대한 값 -->
<param name="Target" value="System.out" />
<!-- 여러가지 param을 설정할 수 있음 name : 필드명 / value : 값 -->
<layout class="org.apache.log4j.PatternLayout"> <!-- 로그를 어떤 형식으로 출력할 것인지 설정 -->
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<appender name="file-log" class="org.apache.log4j.FileAppender">
<param name="file" value="logFile.txt" />
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout"> <!-- 로그를 어떤 형식으로 출력할 것인지 설정 -->
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!--
<param
name="file" : 저장할 파일의 경로를 작성할 때 사용 경로 + 파일명
value="path(경로)"
-->
<!-- 이 logger에 담긴 애들이 찍히는 것 -->
<logger name="org.mybatis">
<level value="info" />
</logger>
appender를 어떤 매체로 출력할건지 설정
console이냐 file이냐..
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
</root>
<!--
<root>
<priority value="debug" />
<appender-ref ref="file-log" />
</root>
-->
내보내진 파일은 sts가 깔려있는 곳에 있음
C:\o\sts-bundle\sts-3.9.13.RELEASE > logFile.txt
2. 테스트
먼저 기능을 다 만들고,
test폴더에 테스트할 패키지를 똑같이 만들고 Mapper(DAO)이름명 + Test.java 클래스를 만들기
package com.kh.boot.job.model.dao;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import com.kh.boot.job.model.vo.JobInterview;
import lombok.extern.slf4j.Slf4j;
@RunWith(SpringRunner.class)
@Slf4j
@SpringBootTest
//@Transactional // 테스터 데이터를 실행할 때마다 Rollback해줌 => insert하면 제약조건 걸리니까 rollback해서 계속 테스트 가능
public class JobInterviewMapperTest {
@Autowired
JobInterviewMapper jobInterviewMapper;
@Test
public void test() {
/*
* given, when, then
*
* given : 어떤 데이터를 사용할 것인가
* when : 무엇을 할 것인가
* then : 어떤 값을 원하는가
*/
JobInterview ji = null;
try {
ji = JobInterview.builder()
.company("KH")
.name("건희")
.interviewer("원장님")
.build();
jobInterviewMapper.insert(ji);
List<JobInterview> jobList = jobInterviewMapper.selectAll();
JobInterview gunhee = jobList.get(0);
log.info("추가된 면접자의 이름 : {}", gunhee.getName());
} catch(Exception e) { // 어떤 예외가 발생하는지 모르니까 Exception으로 받음
log.info("ji가 문제인거 같은데? {}, {}", ji, e);
}
log.info("안녕!");
}
}
Run As > JUnit Test
recources 아래 xml파일 만들기
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="console-sql" class="ch.qos.logback.core.ConsoleAppender">
<charset>UTF-8</charset>
<Pattern>%d $5p %m %n</Pattern>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<Pattern>%d [%c] %5p %m %n</Pattern>
</encoder>
</appender>
<logger name="com.kh" level="DEBUG" appender-ref="console" />
<logger name="jdbc.sqlonly" level="INFO" appender-ref="console-sql" />
<logger name="jdbc.resultsettable" level="INFO" appender-ref="console-sql" />
<root level="INFO">
<appender-ref ref="console" />
</root>
</configuration>