SPRING BOOT

[스프링부트 10] Spring Boot 로그 설정해 보기

내. 일. 을 바꾸는 업무 자동화 2021. 11. 30. 11:21
반응형

오늘은 지금까지 진행했던 개발환경에 log(로그)를 설정해 보도록 하겠습니다. 

먼저 어플리케이션 로그를 찍기 위해 logback을 이용하여 설정을 진행할 것인데요..

스프링부트에서 기본제공되기 때문에 많이 쓰이고 있습니다. 

jdbc(db)에 대한 로그 설정은 log4jdbc를 이용하도록 하겠습니다.

 

자, 그럼 시작해 볼까요? 

 

먼저 application.properties 파일에 아래와 같이 로그 레벨 정보를 설정해 주도록 합시다. 

아래와 같이, 컨트롤러나 서비스별로도 찍고 싶은 로그의 단계를 설정할 수 있습니다. 

DB의 로그를 보기 위해서는 지난 시간에 데이터소스 연결 했던 부분을 아래 이미지를 참고하여 log4jdbc가 작동할 수 있도록 수정해 주셔야 합니다.  (하단의 빨간색 박스를 화살표와 같이 수정 후, 치환 해주세요)

1
2
3
4
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:sqlserver://test.database.windows.net;DatabaseName=SampleDB;sslProtocol=TLSv1.2
spring.datasource.username=id
spring.datasource.password=password
cs

다음은 resourecs 폴더에 logback-spring.xml 파일을 생성해 주도록 합시다. 

resources폴더에 logback-spring.xml 파일이 있으면 기본적으로 그 설정이 로딩되기 때문입니다. 

기본적인 소스 코드는 아래를 참고하여 수정하시면 됩니다.

(로그 설정에 관련된 상세한 부분은 이 포스팅에서는 설명하지 않고 있으므로, 따로 찾아보셔야 합니다. )

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property name="LOGS_ABSOLUTE_PATH" value="./logs"/>
 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern>
    </layout>
  </appender>
  
  <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
 
    <file>./logs/info.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
      <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>./was-logs/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <maxHistory>180</maxHistory>
    </rollingPolicy>
  </appender>
  
 <appender name="WARN_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
 
    <file>./logs/warn.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>WARN</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
      <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>./was-logs/warn.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <maxHistory>180</maxHistory>
    </rollingPolicy>
  </appender>
  
  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>
 
  <logger name="LogController" additivity="false">
    <level value = "DEBUG" />
    <appender-ref ref="INFO_LOG" />
    <appender-ref ref="WARN_LOG" />
  </logger>
  
  <logger name="org.hibernate.SQL" additivity="false">
    <level value = "DEBUG" />
    <appender-ref ref="INFO_LOG" />
  </logger>
 
  <logger name="jdbc" level="OFF"/>
  <logger name="jdbc.connection" level="OFF"/> 
  <logger name="jdbc.sqlonly" level="OFF"/>
  <logger name="jdbc.sqltiming" level="DEBUG"/>
  <logger name="jdbc.audit" level="OFF"/>
  <logger name="jdbc.resultset" level="OFF"/> 
  <logger name="jdbc.resultsettable" level="OFF"/> 
  
</configuration> 
cs

다음은 log4jdbc 사용을 위해 pom.xml에 디펜던시를 추가해 주도록 합시다. 

(log4jdbc는 디펜던시 추가가 되어야 합니다.)

디펜던시 추가 후에는 maven 리로드를 진행해 주셔야 하는 것 아시죠?

1
2
3
4
5
6
<!-- JDBC 로그 설정  시작-->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
            <version>1.16</version>
        </dependency>
cs

 

이제, resources 폴더에 log4jdbc.log4j2.properties 파일을 생성하여 아래와 같은 내용을 작성하도록 합시다.

1
2
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
cs

눈치 채셨겠지만 이제 jdbc 로그의 단계 설정은 logback-spring.xml 파일의 66번 밑의 라인을 참고하면 에 logger name를 이용하여 설정할 수 있습니다. 

자, 이제 어플리케이션을 기동하여 위에서 설정한 로그가 정상 표현 되는지 확인해 봅시다. 

DB로그까지 보기 위해서, http://localhost:8080/emp 를 호출하면 로그가 정상 표현되는 것을 볼 수 있습니다.

아주 간단히 로그 설정하는 법에대해서 방법만 포스팅을 하여 진행해 보았습니다. 

아시다시피 위의 설정 파일들을 이용하여 여러가지 로그 설정이 가능하니 추가로 공부하여 보는 것도 추천 드립니다. 

반응형