안녕하세요 한희성입니다.
이제 앞으로 블로그를 쓸 시간도 없을 듯 .. .합니다. ㅠ_ㅠ흑흑
그동안 틈틈이 쓰고 싶었던 내용들로 하나씩 채워가면서 작성 목록지워가는 재미로 지내왔는데 .. 앞으로는 다른 일에 집중
해야 할듯 싶네요 ㅋㅋ
오늘은 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> |
* 특정 패키지만 찍을 수도있음
* 테이블 찍어 주는 로그
'백앤드 이야기 > JAVA&Spring' 카테고리의 다른 글
[JAVA] 파일 & 폴더 정보 확인, 이동, 생성, 삭제등 (0) | 2020.06.19 |
---|---|
[JAVA] String, StringBuilder, StringBuffer의 차이 (0) | 2020.02.10 |
[JAVA] 자바 비대칭키, 대칭키 암호화 하기 (0) | 2019.09.16 |
[JAVA] 인코딩과 인코딩 방식 (0) | 2019.09.09 |
[JAVA] 하드디스크 드라이브 용량 확인 (0) | 2019.08.05 |
댓글