일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 개발자
- 봄 사랑 벚꽃 말고
- SQL 처리
- I'm fine thank you
- 6학년 8반 1분단
- 스위트라떼
- nginx
- 아이유
- 말 더듬
- 데이터베이스
- Inside Of Me
- 인덱스
- 슬픔의 후에
- IT
- index
- 니가 참 좋아
- 레이디스코드
- DBMS 구성요소
- 오라클
- db
- 장범준
- 러블리즈
- 오라클 아키텍처
- DBMS
- oracle
- 악보
- 기타
- 천공의 시간
- 핑거스타일
- 신입
취미로 음악을 하는 개발자
[Spring Boot] logback 본문
logback
자바는 log4j, logback, log4j2, apache common logging, SLF4j 등 다양한 프레임워크를 가지고 있다.
그 중 logback을 스프링 부트에서 기본적으로 지원한다.
- application.properties를 통한 로깅 설정
- 스프링부트 로깅 커스터마이징 (Spring Boot Loggin Customizing)지원
스프링이나 일반 자바프로그램의 경우 보통 logback.xml 파일을 resources 디렉토리에 만들어서 참조하고
logback은 이 설정파일을 자동으로 찾는데
logback.groovy -> logback-test.xml -> logback.xml 순서로 찾고 없으면 디폴트 설정을 따름
스프링 부트의 경우 logback-spring.xml이라는 이름으로 설정하는데 그 이유는
logback.xml이라는 이름으로 이미 스프링 부트가 설정되기 전에 로그백 관련 설정이 되어있기 때문에
프로젝트 생성
코드 구현
// application.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | server.port = 8081 # JSP spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.datasource.url=jdbc:log4jdbc:mysql://112.167.20.57:3306/kfc?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=nakji spring.datasource.password=mysql mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml spring.output.ansi.enabled=always logging.path=logs logging.level.com.study.springboot=DEBUG | cs |
13번 줄은 콘솔 창에 출력되는 로깅 메시지를 색으로 구분해서 출력
15번 줄은 로그 메시지가 저장되는 로그 디렉토리
17번 줄은 loggin.level.{패키지 경로}를 통해 로깅 레벨을 결정
// build.gradle의 dependencies 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' implementation("mysql:mysql-connector-java") implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'javax.servlet:jstl' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16' } | cs |
1 2 3 4 5 6 7 8 9 | package com.study.springboot.jdbc; import lombok.Data; @Data public class MyUserDTO { private int id; private String auth; } | cs |
1 2 3 4 5 6 7 8 9 10 | package com.study.springboot.jdbc; import java.util.List; import org.apache.ibatis.annotations.Mapper; @Mapper public interface IMyUserDao { List<MyUserDTO> list(); } | cs |
// MyUserDao.xml
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.study.springboot.jdbc.IMyUserDao"> <select id="list" resultType="com.study.springboot.jdbc.MyUserDTO"> select * from user </select> </mapper> | cs |
// logback-spring.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> [%d{yyyy-MM-dd HH:mm:ss}:%-3relative] [%thread] %-5level %logger{36} -%msg%n </pattern> </encoder> </appender> <logger name="com.study.springboot" level="debug"/> <root level="info"> <appender-ref ref="console"/> </root> </configuration> | cs |
SQL 로그는 info 레벨에서는 출력이 안되고 debug 레벨부터 출력 가능
* 위처럼 해도 나오지만 좀 더 정확하게 하려면 아래의 코드를 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss}:%-3relative [%thread] %-5level %logger{36} -%msg%n </pattern> </encoder> </appender> <logger name="com.study.springboot" level="info"/> <logger name="jdbc" level="OFF" /> <logger name="jdbc.sqlonly" level="OFF" /> <logger name="jdbc.sqltiming" level="DEBUG" /> <logger name="jdbc.resultset" level="OFF" /> <logger name="jdbc.resultsettable" level="DEBUG" /> <logger name="jdbc.connection" level="OFF" /> <root level="off"> <appender-ref ref="console"/> </root> </configuration> | cs |
// log4jdbc.log4j2.properties
1 2 | log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator log4jdbc.dump.sql.maxlinelength=0 | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.study.springboot; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.study.springboot.jdbc.IMyUserDao; @Controller public class MyController { @Autowired private IMyUserDao userDao; @RequestMapping("/") public @ResponseBody String root() throws Exception { return "MyBatis 사용하기"; } //@GetMapping("/user") @RequestMapping(value = "/user", method = RequestMethod.GET) public String userlistPage(Model model) { model.addAttribute("users", userDao.list()); return "userlist"; } } | cs |
// userlist.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% out.println("MyBatis : Hello World"); %> <br> <c:forEach var="dto" items="${users}"> ${dto.id} / ${dto.auth} <br> </c:forEach> </body> </html> | cs |
로그 출력
어떤 SQL문이 실행되고 시간과 SQL 결과가 같이 출력됨
'공대인 > Spring[Boot]' 카테고리의 다른 글
[Spring Boot] Security (0) | 2019.08.22 |
---|---|
[Spring Boot] Transaction (Manager, Template, Propagation) (0) | 2019.08.22 |
[Spring Boot] MyBatis HashMap 사용 (2) | 2019.08.16 |
[Spring Boot] MyBatis 파라미터 사용 (0) | 2019.08.14 |
[Spring Boot] MyBatis (0) | 2019.08.13 |