백앤드 이야기/JAVA&Spring

[Spring] spring profile 및 logback-spring.xml 을 이용한 log 관리

한희성 2019. 10. 21.
반응형

안녕하세요 한희성입니다.


이제 앞으로 블로그를 쓸 시간도 없을 듯 .. .합니다. ㅠ_ㅠ흑흑


그동안 틈틈이 쓰고 싶었던 내용들로 하나씩 채워가면서 작성 목록지워가는 재미로 지내왔는데 .. 앞으로는 다른 일에 집중


해야 할듯 싶네요 ㅋㅋ


오늘은 logback-spring.xml 으로 개발 환경과 운영환경 모두 로깅이 가능한 logback 을 작성하도록 하겠습니다.


개발OS와 운영OS 가 갖다면 사실 로그 경로는 크게 신경 안써도 됩니다만, 운영체제가 같다고 하여도 운영환경에서의 로그 


파일은 개발환경 위치와 다를 수 있기 때문에 이번 포스팅을 활용하면 개발할때 매번 주석을 풀었다 했다 하지 않아


도 되고, 매번 로그 레벨을 변경하지 않아도 되는 나름 반 자동화 이지요 ~~ 수동배포한다면... 


제목처럼 spring profile을 이용한 로그 관리이므로 https://hhseong.tistory.com/34?category=749094  를 먼저 참고하여 환경


변수를 설정하시고 ~~ (저번 포스팅은 너무 허접하게 분석.. ) 이번 포스팅엔 좀더 깔끔한 코드를 붙여두도록 하겠습니다..


아래 각 패키지 별 하는 일과 최종 소스 ~


ch.qos.logback.core.ConsoleAppender : 

* 콘솔에 로그를 텍스트 형태로 보여주는 클래스로써, 패턴을 이용한 다양한 텍스트 형태를 출력 할 수 있습니다.

* %d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg%n

* 일반적인 패턴이며 날짜, 쓰레드 이름, 고정폭 값, 메시지, 엔터처리 등 설정할 수 있다.


ch.qos.logback.core.rolling.RollingFileAppender : 

* 일자별 로그를 관리 할 수 있도록 파일 관리 패키지

* ch.qos.logback.core.rolling.TimeBasedRollingPolicy : 파일 옵션 패키지

* maxFileSize : 하나의 로그 파일 최대 사이즈

* maxHistory : 일수가 지나면 자동 삭제

* ch.qos.logback.core.rolling.FixedWindowRollingPolicy : 옵션에 따라 파일을 압축

* <FileNamePattern>${LOG_PATH_PROD}/DEBUG/log_%d{yyyy-MM-dd}.%i.txt</FileNamePattern>

* i : maxFileSize 의 사이즈가 넘어 갈 경우 1씩 증가하면서 로그가 생긴다.


<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<include resource="org/springframework/boot/logging/logback/defaults.xml" />

<!-- 개발 환경마다 로그 저장 위치가 다를 수 있으므로 각각 설정한다.  경로/프로젝트이름/-->

<property name="LOG_PATH" value="D:${file.separator}${file.separator}spring_log${file.separator}heeseong${file.separator}" />


<!-- 콘솔 로그 출력 -->

<appender name="TEXT_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

<encoder>

<charset>UTF-8</charset>

<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</Pattern>

</encoder>

</appender>

<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

<encoder>

<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</Pattern>

</encoder>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<FileNamePattern>${LOG_PATH}/INFO/log_%d{yyyy-MM-dd}.%i.txt</FileNamePattern>

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

<maxFileSize>10MB</maxFileSize>

</timeBasedFileNamingAndTriggeringPolicy>

<maxHistory>30</maxHistory>

</rollingPolicy>

</appender>


<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

<encoder>

<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</Pattern>

</encoder>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<FileNamePattern>${LOG_PATH}/DEBUG/log_%d{yyyy-MM-dd}.%i.txt</FileNamePattern>

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

<maxFileSize>10MB</maxFileSize>

</timeBasedFileNamingAndTriggeringPolicy>

<maxHistory>30</maxHistory>

</rollingPolicy>

</appender>

<!--로그 레벨

WERROR > WARN > INFO > DEBUG > TRACE

-->

<springProfile name="dev">

<root level="INFO">

<appender-ref ref="TEXT_CONSOLE" />

<appender-ref ref="INFO_FILE" />

</root>

</springProfile>


<springProfile name="prod">

<root level="DEBUG">

<appender-ref ref="DEBUG_FILE" />

</root>

</springProfile>

</configuration>

 



* 위 로그 외 ch.qos.logback.classic.sift.SiftingAppender 와

MDC(slf4j)를 이용하여 userId 별 로그를 관리하는 것도 있다.

 MDC.put("userId", userId);


<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">

<discriminator>

<key>userId</key>

<defaultValue>unknown</defaultValue>

</discriminator>


<sift>

<appender name="logForUserId"

class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>${LOG_PATH_DEV}/${userId}.log</file>

<encoder

class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

<Pattern>

%d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %-5level %logger{36} - %msg%n

</Pattern>

</encoder>


<rollingPolicy

class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

<FileNamePattern>${LOG_PATH_DEV}/${userId}.%i.log.zip</FileNamePattern>

<MinIndex>1</MinIndex>

<MaxIndex>10</MaxIndex>

</rollingPolicy>


<triggeringPolicy

class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

<MaxFileSize>10KB</MaxFileSize>

</triggeringPolicy>

</appender>

</sift>

</appender>



* 특정 패키지만 찍을 수도있음

* 테이블 찍어 주는 로그



디테일 : https://androphil.tistory.com/420#at_pco=smlre-1.0&at_si=5eec68f0f90c4753&at_ab=per-2&at_pos=0&at_tot=5








반응형

댓글

💲 추천 글