[AXBoot]배너 텍스트 변경 / Logging / 에러로그 관리 / Logback / Exception

yesjm·2021년 4월 30일
1

배너 텍스트

axboot-common.properties에 아래 코드를 추가한다.

resources 폴더에 banner.txt 파일을 생성하고, patorjk에서 간지나는 문자를 생성해서 banner.txt에 저장해준다.

프로그램 실행시에 기본배너가 아닌 간지나는 배너를 확인할 수 있다.


System.out.println() 은 성능에 문제가 생길 수 있다.
Logging이 없던 시절에나 사용하던 방식이다.

Logging

  • logging level
    • 정보(info) : 개발/테스트 시 단순 정보를 출력 (system.out.println 대체)
    • 경고(warning) : 비정상 입력 또는 오동작 발생시 출력
    • 오류(error) : 심각한 문제 발생시 출력, 예외(Exception)을 감지 사용
    • 디버그(debug) : 어플리케이션 디버깅 실행 시 확인 목적 출력
    • 추적(trace) : 디버그보다 상세한 수준의 로그

현장에서 주로 많이 사용하는 것은 info, error. 나머지는 필요에 따라 사용한다.

에러 로그를 남기고 싶은 서비스단 상단에 아래 코드를 추가해준다.

로그를 확인하고자 하는 메소드에 아래 코드를 추가한다.

swagger에서 해당 컨트롤러를 실행하면 로그를 확인할 수 있다.

에러로그 관리 (DB 저장)

axboot-local.properties / axboot-production.properties

true면 db에 저장이 되고, false면 저장되지 않는다.

Logback (File 저장)

logback.xml을 보면

<configuration>
    <include resource="logback-common.xml"/>
    <include resource="logback-${spring.profiles.active:-local}.xml"/>
</configuration>

이런 코드가 있는데 에러가 발생했을 때 실행하는 순서를 나타낸다.

logback-common.xml은 오류를 콘솔에 출력하는 형식이 담겨져 있다.

logback-local.xml || logback-production.xml

<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!-- 파일경로 설정 -->
    <property name="LOGS_ABSOLUTE_PATH" value="./logs" />
    <!-- File Appender -->
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 파일명 설정 -->
        <file>${LOGS_ABSOLUTE_PATH}/logback.log</file>
        <!-- 출력패턴 설정-->
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <!-- Rolling 정책 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
            <fileNamePattern>${LOGS_ABSOLUTE_PATH}/logback.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 파일당 최고 용량 kb, mb, gb -->
                <maxFileSize>300kb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>
    <root level="ERROR">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ROLLING" />
    </root>
</included>

local은 개발하면서 발생할 에러 로그에 관한 것이고 production은 배포시에 발생할 에러 로그에 대한 것이다.


rolling 정책 : 데이터가 어느정도 차면 파일을 삭제하고 다시 만드는 것을 반복적으로 실행해라 등의 설정을 할 수 있다.
<appender-ref ref="ROLLING" />로 설정하면 intellij에서 로그를 확인 할 수 없고 로그 파일에 저장된다.

STDOUT 주석을 해제하면 화면과 로그파일 모두에 작성된다.

배포용으로 서버를 실행시키려면 Application 코드의 local을 production으로 변경하면 된다.

Exception (예외처리)

  • 각 Layer 에서 Runtime 시에 Exception 이 발생할 수 있다. Exception 이 발생시 적절한 후처리를 해야 할 필요가 있다.
  • Framework 에서는 Exception Handling 에 대한 메커니즘을
    제공하고 있으며 , Exception 유형별로 적절한 처리가 가능하도록 설계되었다.
  • Application Exception 는 비즈니스 로직 처리 시 발생하는 예외 처리를 위한 Exception Type 이다 . 비즈니스 로직은 Service 에만 구현되므로 , ApplicationException 은 Service에서 발생 시키는 것을 표준으로 한다
  • Controller 에서 try catch 를 활용하여, 일반적인 Exception 처리를 해줄 수 있다.

Controller에서 try catch 문을 작성해 보면

로그파일에서 확인할 수 있다.

Service에 Exception을 던지는 코드를 작성한다.

profile
yesjm의 개발블로그~

0개의 댓글