05AM
Error : Github action으로 CI/CD 중 permission denied 본문
에러
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/var/log/tattour/error.log,true) call failed. java.io.FileNotFoundException: /var/log/tattour/error.log (Permission denied)
과정
- logback-spring.xml 추가 후 에러 발생
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 로그 파일이 저장될 경로 -->
<!-- <springProperty name="filePath" source="logging.file.path"/>-->
<property name="LOG_PATH" value="/var/log/tattour"/>
<!-- <property name="LOG_PATH" value="./logs"/>-->
<!-- 로그 파일 이름 -->
<property name="LOG_FILE_NAME" value="error"/>
<!-- 로그 출력 패턴 -->
<property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%line] - %msg%n"/>
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){green} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/>
<!-- 로그 레벨 -->
<!--
1) ERROR : 오류 메시지 표시
2) WARN : 경고성 메시지 표시
3) INFO : 정보성 메시지 표시
4) DEBUG : 디버깅하기 위한 메시지 표시
5) TRACE : Debug보다 훨씬 상세한 메시지 표시
아래에서는 info로 설정하였는데, 이 경우엔 INFO 보다 위에 있는 DEBUG와 TRACE는 표시하지 않는다.
-->
<property name="LOG_LEVEL" value="info"/>
<!-- CONSOLE에 로그 출력 세팅 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
</appender>
<!-- File에 로그 출력 세팅 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 파일 경로 설정 -->
<!-- <file>${filePath}/${LOG_FILE_NAME}.log</file>-->
<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>30</maxHistory>
<!--<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>-->
</rollingPolicy>
</appender>
<!-- 로그 전역 세팅 -->
<root level="${LOG_LEVEL}">
<!-- 위에 설정한 콘솔 설정 추가 -->
<appender-ref ref="CONSOLE"/>
<!-- 위에 설정한 파일 설정 추가 -->
<appender-ref ref="FILE"/>
</root>
</configuration>
- file path로 설정했던 경로에 code deploy를 실행하는 user(ubuntu)에게 폴더에 대한 권한이 없어서 일어나는 에러
- file path에 해당하는 폴더 구조(/var/log/tattour)와 파일 error.log를 배포 전에 서버에 미리 만들어 둔다.
- 로그 파일이 저장되는 file path의 읽기, 쓰기, 실행 권한을 code deploy를 수행하는 user ubuntu에게 부여한다. 사실 실행 권한을 줘야 하는지는 모르겠다. 이후에 알아보겠다.
- 권한 부여
# 읽기, 쓰기 권한 $ sudo chown ubuntu /var/log/tattour # 실행 권한 $ sudo chmod +x error.log
- 부여한 권한 확인
$ ls -l /var/log/tattour
추가
logback-spring.xml을 추가했을 때 에러가 발생하지 않아서 지나칠 수 있지만 ch.qos.logback.core와 ch.qos.logback.classic을 build.gradle에 추가하지 않으면 java.lang.NoClassDefFoundError: ch/qos/logback/core/util/ContextUtil 에러가 발생한다.
// log back
implementation 'ch.qos.logback:logback-classic'
implementation 'ch.qos.logback:logback-core'
'Error Traceback' 카테고리의 다른 글
Error : 순환 참조 → facade 패턴 (0) | 2023.07.21 |
---|---|
Error : java.lang.NoClassDefFoundError - Dependency 충돌 / build cache 충돌 (0) | 2023.07.21 |
Comments