-
[설정] Spring boot 2 Logback 설정Spring/Spring Boot 2019. 1. 30. 14:31반응형
프로젝트 생성할때마다 가장 귀찮은것중 하나가 로그 설정 같다. 그냥 롤링정도만 하면 괜찮은데 로그 수집용, 용도별 등등 분류해서 쌓아야 할경우가 많았고 Spring framework 를 사용할땐 한상 만들어놓은 app.properties 를 복붙해서 별신경 안쓰고 쓰던거 같다 ( 그래서 그런지 잘 못외움... 뭐하는건지검색해야 아맞다 싶음).
그래서 기본적인것만 블로그에 남겨 둔다. 나중에 검색하는 수고로움을 좀더 줄이기 위해 ....
spring:
profiles :
active : prod
scribed : test
scheduler :
type : master
web :
url :
parttern :
servlet:
multipart:
max-file-size: 30MB
max-request-size : 30MB
logging:
config: classpath:logback-spring.xml일단 application.yml 에 logging 값을 설정하고 logback 사용을 위한 xml 을 지정 한다. ( logback-spring.xml 이라는 명을 지키고 application.yml 과 같은 레벨에 둔다 . Spring boot에서 logback.xml 로 사용할 경우 설정우선순위에 밀려서 설정이 안먹힐수 있다. )
<!-- mybatis log4jdbc-log4j2 라이브러리 -->
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
</dependency>라이브러리는 구글에서 만든걸로 사용했다. log4jdbc 라는 이름으로 생각보다 다양한곳에서 만들어진 라이브러리들이 있었다. 난 믿음의 구글로 사용하였다. !
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>log/apilog-%d{yyyy-MM-dd}.%i.txt.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS}-%green(%-5level)-%logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS}-%green(%-5level)-%logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>flonetd/flog-%d{yyyy-MM-dd}.txt.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%5p [%d] %msg%n</pattern>
</encoder>
</appender>
<!-- Loggers -->
<logger name="org.springframework.core">
<level value="info"/>
</logger>
<logger name="org.springframework.beans">
<level value="info"/>
</logger>
<logger name="org.springframework.context">
<level value="info"/>
</logger>
<logger name="org.springframework.web">
<level value="info"/>
</logger>
<logger name="com.example.web">
<level value="debug"/>
</logger>
<logger name="java.sql">
<appender-ref ref="ROLLING"/>
<appender-ref ref="STDOUT"/>
<level value="info"/>
</logger>
<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. -->
<logger name="jdbc.sqlonly" additivity="false">
<appender-ref ref="ROLLING"/>
<appender-ref ref="STDOUT"/>
<level value="info"/>
</logger>
<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
<logger name="jdbc.sqltiming" additivity="false">
<!--<appender-ref ref="ROLLING"/>-->
<!--<appender-ref ref="STDOUT"/>-->
<!--<level value="info"/>-->
</logger>
<logger name="jdbc.resultset" additivity="false">
<!--<appender-ref ref="ROLLING"/>-->
<!--<appender-ref ref="STDOUT"/>-->
<!--<level value="info"/>-->
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<appender-ref ref="ROLLING"/>
<appender-ref ref="STDOUT"/>
<level value="debug"/>
</logger>
<logger name="jdbc.connection" additivity="false">
<appender-ref ref="ROLLING"/>
<level value="fetal"/>
</logger>
<logger name="jdbc.audit" additivity="false">
<!--<appender-ref ref="ROLLING"/>-->
<!--<appender-ref ref="STDOUT"/>-->
<!--<level value="info"/>-->
</logger>
<logger name="flunetd" additivity="false" >
<appender-ref ref="FLOG"/>
<level value="info"/>
</logger>
<root level="info">
<appender-ref ref="ROLLING"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>STDOUT 과 FLOG 두가지를 남길 것이다. 기본적으로 appder 의 종류는 RollingFileAppender 로 지정한다 다른것들이 많지만 범용적으로 쓰기엔 딱좋다.
maxFileSize : 로그를 용량 단위로 분할함. ( vim 으로 로그를 보거나 옴길때 좋다. 용량이 크면 잘 안열리니까 )
pattern : 출렬 패턴이다. 생각보다 다양하게 사용이 가능하다 ( 제약적이지만 ) STOUT 에서쓰는 패턴과 FLOG 에서 쓰는 패턴을 보면 용도가 다르기 때문에 서로 다르게 포맷팅이 되있다.
그외에 <logger></logger> 로 정의 되있는것들은 spring 자체 메세지 처리를 위한 설정 값들이다 . core 내용이 보기 싫으면 제거하면 되는거 같다.
그리고 jdbc 관련 로그 설정들이 그 뒤에 이어진다.
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
개인적으로 이 드라이버를 사용중이기때문에 쿼리문에 대한 결과 값을 로그로 찍기 위해 설정을 더 해놓았다.
쿼리문이 실행된 시간(sqtiming), 실제 실행된 쿼리문(audit), 쿼리결과 (resultset) , 쿼리결과를 표로(resultsettable)등을 설정할수있고 logback에서 제공하는 레벨로 로깅 컨트롤이 가능하다 .
개인적으로 일반적으로 디버깅에 필요한건 info 로 찍고 잡다한건 debug 로 찍어 놓는데 맨아래 root level 에 레벨을 설정해 놓으면 기본적으로 최우선으로 적용되는것 같다 ( 맞나 -_-a ;; )
properties 보단 xml 이 개인적으로 보기는 어렵지만 그래도 properties 가 오래되었기에 그나마 최신(?) xml 을 사용해 봐야겠다
반응형'Spring > Spring Boot' 카테고리의 다른 글
Spring boot vs Spring Framework (1) 2019.08.07 Logback - 특정 이름별로 로그 분리 하기 (0) 2019.06.26 Spring Cloud (0) 2019.03.25 [설정] Spring boot 2 Yml 설정하기 (0) 2019.01.28 [설정]Spring boot 2 Database 여러개 설정하는 방법 (0) 2019.01.28