티스토리 뷰

Skill/spring

[spring] 파일로 log남기기

진열사랑 2021. 3. 31. 11:33

출처 : romeoh.tistory.com/entry/Spring-Boot-Logback-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

Spring Boot는 logback이 기본으로 설정되어 있어서 별도로 라이브러리를 추가하지 않아도 됩니다.

spring-boot-starter-web 안에 spring-boot-starter-logging 구현체가 있습니다.

만약 Spring Boot가 아니라면 maven에서 logback 모듈을 추가해줘야 합니다.

<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version>
</dependency>

 

logback-spring.xml만 작성하여 src/main/resources에 넣으면 되네요

 

* applicaton.properties파일 설정1

logging.level.root=warn

 

페이지를 새로고침하면 info 로그는 찍히지 않고 warn이상의 로그만 찍힙니다.

 

로그레벨의 순서는 아래와 같습니다.

TRACE > DEBUG > INFO > WARN > ERROR

- TRACE : 추적 레벨은 Debug보다 좀더 상세한 정보를 나타냅니다.
- DEBUG : 프로그램을 디버깅하기 위한 정보를 표시합니다. (운영서버에서는 표시하지 않도록 설정함)
- INFO  : 상태변경과 같은 정보성 로그를 표시합니다.
- WARN  : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄 
- ERROR : 요청을 처리하는 중 오류가 발생한 경우 표시합니다.

* applicaton.properties파일 설정2

# logging.level.{패키지 경로}를 통해 로깅 레벨을 결정할 수 있슴
logging.level.wam.app=DEBUG
logging.level.org.hibernate.SQL=DEBUG

 

    <springProfile name="default">

        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern>
            </encoder>
        </appender>
        <!-- 변수 지정 -->
        <property name="LOG_DIR" value="C:\\project\\logs\\WAM" />
        <property name="LOG_PATH_NAME" value="${LOG_DIR}\\application.log" />

        <!-- FILE Appender -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH_NAME}</file>
            <!-- 일자별로 로그파일 적용하기 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>10MB</maxFileSize>
                <maxHistory>60</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
            </encoder>
        </appender>

        <logger name="org.hibernate.SQL" level="INFO" additivity="false">
            <appender-ref ref="STDOUT" />
        </logger>
        <logger name="org.hibernate.type" level="INFO" additivity="false">
            <appender-ref ref="STDOUT" />
        </logger>
        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="INFO" additivity="false">
            <appender-ref ref="STDOUT" />
        </logger>
        <logger name="com.mindone.okch" level="DEBUG" additivity="false">
            <appender-ref ref="STDOUT" />
        </logger>
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    </springProfile>

<CASE 1>

[logback-spring.xml]

<logger name="org.hibernate.SQL" level="INFO" additivity="false"> 

[applicaton.properties]

#logging.level.org.hibernate.SQL=DEBUG

-- [결과] 

파일로 로그가 남지 않는다, console에 Hibernate: 로 시작하는 한번의 로그가 보인다. 이것은 아래 설정 때문인 듯

[applicaton.properties]

spring.jpa.properties.hibernate.show_sql=true

spring.jpa.properties.hibernate.format_sql=true

Hibernate: 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_

 

<CASE 2>

[logback-spring.xml]

<logger name="org.hibernate.SQL" level="INFO" additivity="true">

[applicaton.properties]

logging.level.org.hibernate.SQL=DEBUG

-- [결과] 

로 변경하면 파일로 로그가 남네요.

엇 설정 우선순위가.. logback-spring.xml에서는 level="INFO"이지만 applicaton.properties파일 설정 DEBUG가 효과를 발휘했네요. 파일의 출력 형식은 아래와 같아요. 

[application.log]
2021-03-31 10:19:09 [DEBUG] [SqlStatementLogger.java]logStatement(144) : 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_

console은 4개의 로그가 찍혔네요

[console]
20210331 10:54:46.785 [http-nio-8080-exec-48] DEBUG o.h.SQL - 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_ 
2021-03-31 10:54:46.785 DEBUG 14036 --- [io-8080-exec-48] org.hibernate.SQL                        : 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_
20210331 10:54:46.785 [http-nio-8080-exec-48] DEBUG o.h.SQL - 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_ 
Hibernate: 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_

 

<CASE 3>

[logback-spring.xml]

<logger name="org.hibernate.SQL" level="INFO" additivity="true">로 설정

[application.properties]

#logging.level.org.hibernate.SQL=DEBUG

-- [결과] 

파일로그 찍히지 않음. console에 Hibernate: 로 시작하는 한번의 로그

 

<CASE 4>

[logback-spring.xml]

<logger name="org.hibernate.SQL" level="DEBUG" additivity="true">

    <appender-ref ref="FILE"><!-- STDOUT에서 변경 -->

</logger>

[application.properties]

#logging.level.org.hibernate.SQL=DEBUG

-- [결과] 

2번의 파일로그. console에 다음과 같이 3번의 로그

2021-03-31 11:24:42.811 DEBUG 29016 --- [nio-8080-exec-3] org.hibernate.SQL                        : 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_
20210331 11:24:42.811 [http-nio-8080-exec-3] DEBUG o.h.SQL - 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_ 
Hibernate: 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_

<CASE 5>

[logback-spring.xml]

<logger name="org.hibernate.SQL" level="DEBUG" additivity="true">

    <appender-ref ref="FILE"><!-- STDOUT에서 변경 -->

</logger>

[application.properties]

# logging.level.{패키지 경로}를 통해 로깅 레벨을 결정할 수 있음.

#logging.level.wam.app=DEBUG #package 경로 주석처리

#logging.level.org.hibernate.SQL=DEBUG

-- [결과] 

2번의 파일로그. console에 다음과 같이 2번의 로그

2021-03-31 14:09:13.151 DEBUG 29016 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_
Hibernate: 
    select
        count(tamasstfcl0_.asst_sn) as col_0_0_ 
    from
        t_am_asst_fclty tamasstfcl0_

 

<CASE 6>

[logback-spring.xml]

<logger name="org.hibernate.SQL" level="DEBUG" additivity="true">

    <appender-ref ref="FILE"><!-- STDOUT에서 변경 -->

</logger>

<logger name="wam.app" level="DEBUG" additivity="false">

    <appender-ref ref="STDOUT">

</logger>

<!-- 주석처리 <root level="ERROR">

    <appender-ref ref="STDOUT"/>

    <appender-ref ref="FILE"/>

</root>-->

[application.properties]

#spring.jpa.properties.hibernate.show_sql=true

spring.jpa.properties.hibernate.format_sql=true

#logging.level.wam.app=DEBUG #package 경로 주석처리

#logging.level.org.hibernate.SQL=DEBUG

 

-- [결과] 

1번의 파일로그. console에 다음과 같이 2번의 로그

<pattern>

[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n
[2019-08-23 22:59:47:1306][main] INFO  c.g.f.FirstProjectApplication - Started FirstProjectApplication in 1.193 seconds (JVM running for 1.665)

%d  => 로그 기록시간

%thread => 현재 Thread 이름

%-5level => 로그 레벨, -5는 출력의 고정폭 (5글자)

%logger{35} => 축약된 logger name, 35는 최대 자릿수

%msg => 로그메시지

%n => 줄바꿈

 

기타

${PID:-} => 프로세스 아이디

%p => 로깅 레벨

%F => 로깅이 발생한 프로그램 파일명

%M => 로깅일 발생한 메소드의 이름

%l => 로깅이 발생한 호출지의 정보

%L => 로깅이 발생한 호출지의 라인 수

%t => 쓰레드 명

%c => 로깅이 발생한 카테고리

%C => 로깅이 발생한 클래스 명

%m => 로그 메시지

%r => 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간

 <file>

기록할 파일명과 경로를 설정합니다.

<rollingPolicy class>

ch.qos.logback.core.rolling.TimeBasedRollingPolicy => 일자별 적용

ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP => 일자별 + 크기별 적용

 

<fileNamePattern>

파일 쓰기가 종료된 log 파일명의 패턴을 지정합니다.

.gz나 .zip으로 자동으로 압축할 수도 있습니다.

 

<maxFileSize>

최대 파일 용량 (최대 10MB 내외 권장)

 

<maxHistory>

최대 파일 생성 갯수 (

 

<root> 와 <logger>

root는 logger와 같고, 최상위 패키지에 기본적으로 적용한다.

'Skill > spring' 카테고리의 다른 글

[spring] devtools  (0) 2021.04.13
logback-spring.xml 설정  (0) 2021.04.02
[maven] pom.xml Packaging jar -> war  (0) 2021.03.17
[maven] spring maven 프로젝트로 보이지 않을 때  (0) 2021.03.17
[spring] 파일업로드 fileupload  (0) 2021.03.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함