Java

[Java] Java Logging

Joo.v7 2024. 9. 11. 23:23

SLF4J (Simple logging facade for java)

 다양한 로킹 프레임워크에 대한 간단한 Facade 또는 추상화 역할을 하여 최종 사용자가 배포시 원하는 로깅 프레임워크를 사용할 수 있도록 한다.

Logback

 다양한 Logging framework 중 하나.

1. 로그 레벨

  • error > warn > info > debug > trace
    • error : 요청 처리 중 문제가 발생.
    • warn : 프로그램 실행은 문제 없지만, 향후 문제가 일으킬 수 있다.
    • info : 정보성 메시지.
    • debug : 개발 시 디버그 용도로 사용.
    • trace : 좀 더 상세한 이벤트를 나타낼 때 사용.

2. Logback 설정 및 사용

  1. https://mvnrepository.com/ 에서 slf4j, logback classic module 검색.
  2. 각 버전 선택 후 .jar 내려받아서 lib에 추가.
  3. resources안에 logback.xml 파일 생성 후 설정.
    (logback을 이용하면 appender 별로 로그 레벨을 설정해 주거나, 일정 기간이 지난 로그 파일을 지우고나, 로그의 용량을 제한하는 등의 다양한 기능을 사용할 수 있다.)
  • %data : 로깅 발생 날짜
  • %thread : 현재 Thread명
  • %-5level : 로그 레벨 (5글자)
  • %msg : 로깅 메시지
더보기
<configuration>
 <!-- 파일로 출력 -->
 <appender name="FILE" class="ch.qos.logback.core.FileAppender">
 <file>myApp.log</file>
 <encoder>
 <pattern>%date [%thread] %level %logger{10} [%file:%line] - %msg%n</pattern>
 </encoder>
 </appender>
<!-- 표준 출력 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<!-- debug 레벨 설정 -->
<root level="debug">
    <appender-ref ref="FILE"/>
    <appender-ref ref="STDOUT"/>
</root>

</configuration>

log 찍어서 logback 적용 테스트

더보기
public class MyLogback {
    private static final Logger logger = LoggerFactory.getLogger(MyLogback.class);

    public static int sum(int a, int b) {
        logger.trace("테스트 용 = {}, {}", a, b);
        logger.info("덧셈 연산 수행 : {} + {}", a, b);
        return a+b;
    }

    public static int divide(int a, int b) {
        if(b == 0) {
            logger.warn("덧셈 연산 실패.. 0으로 나눌 수 없음");
            throw new ArithmeticException("0으로 나눌 수 없습니다.");
        }
        return a/b;
    }

    public static void main(String[] args) {
        int a = 1;
        int b = 2;

        System.out.println(sum(a, b));
        System.out.println(divide(a, 0));
    }

}

 

실행 결과

15:35:27.766 [main] INFO  com.nhnacademy.edu.MyLogback - 덧셈 연산 수행 : 1 + 2
3
15:35:27.768 [main] WARN  com.nhnacademy.edu.MyLogback - 덧셈 연산 실패.. 0으로 나눌 수 없음
Exception in thread "main" java.lang.ArithmeticException: 0으로 나눌 수 없습니다.
        at com.nhnacademy.edu.MyLogback.divide(MyLogback.java:18)
        at com.nhnacademy.edu.MyLogback.main(MyLogback.java:28)

 

Logback on Maven

  • pom.xml
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>

 

  • use
@Slf4j
public class RequestServlet extends HttpServlet {

    // ...
        cache(IOException ex){
            log.error("exception : {}", ex);
        }
    // ...
}

 

  • Delombok
private static final Logger log = org.slf4j.LoggerFactory.getLogger(RequestServlet.class);

 

 


 

 

출처: https://github.com/nhnacademy-bootcamp/java-dev-settings/tree/main/docs/05.logging

'Java' 카테고리의 다른 글

[Java] String, StringBuilder, StringBuffer  (1) 2024.10.06
[Java] Java에서의 Stream (스트림)  (0) 2024.09.12
[Java] Maven (메이븐)  (2) 2024.09.11
[Java] 14. Collections Framework  (0) 2024.09.02
[Java] 13. Anotation(어노테이션)  (0) 2024.09.02