카테고리 없음

#107. 로깅, 디버깅, 테스트코드작성

열하나요 2023. 12. 7. 10:20

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>