로깅 : 로그를 남기는 것

System.out.println()와 같이 필요한 정보를 출력하며 시스템의 복잡성을 해결할 수 있다.

또 성능에 관한 통계와 정보를 남길 수 있다. 

 

다양한 로그 라이브러리

 

System.out.println() : System.out.println()는 활용하기엔 기능이 제한적이다.

또 서버에서 이를 사용하면 실행 속도가 많이 느려진다.

그래서 다른 로그 라이브러리를 사용해서 객체를 만들어 사용해야 한다.

 

java.util.logging : java에서 기본적으로 제공하는 라이브러리 java.util.logging이 있지만 기능이 많이 없다.

 

Log4j : 다양한 로그 라이버리 중 Log4j를 가장 많이 사용한다.

 

Logback : Logback은 Log4j의 단점을 개선하고 기능을 더 추가한 라이브러리이다. 

 

SLF4J

 

로깅 관련해서 다양한 라이브러리들이 존재한다.

이러한 라이브러리들을 통일된 방식으로 사용하기 위해서 SLF4J를 사용해야한다. 

SLF4J는 인터페이스들의 모음이다. (로그 라이브러리를 꽂아 사용하는..?그런 의미)

장점 : 도중에 다른 로그 라이브러리를 사용해도 코드를 수정할 필요가 없다.

 

maven에 의존성 추가

 

pom.xml

// org.slf4j 의존성 추가
<dependency> 
	<groupId>org.slf4j</groupId> 
	<artifactId>slf4j-api</artifactId> 
	<version>1.7.25</version> 
</dependency>

// logback 의존성 추가
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

기본적으로 commons-logging을 사용하는데 이를 제거하면 에러가 발생한다.

그것을 방지하기 위해서 아래 코드를 추가한다. 

<dependency> 
	<groupId>org.slf4j</groupId> 
	<artifactId>jcl-over-slf4j</artifactId>
	<version>1.7.25</version> 
</dependency>

 

logback 설정해주기

 

SLF4J는 인터페이스이기 때문에 실제로 로그를 남기는

logback 라이브러리를 사용해주기 위해서 설정을 따로 해줘야 한다. 

 

src/main/resources경로에 logback.xml파일명으로 설정해주면 자동으로 인식을 해준다.

 

logback.xml 설정

 

1) Appender

로그 출력위치를 정하기 위해서는 Appender를 사용한다. Appender에는 다양한 종류가 있다.

ConsoleAppender: 콘솔에 로그를 출력해준다.

FileAppender : 파일에 로그 메시지를 출력한다.
RollingFileAppender : 로그의 크기가 지정한 용량 이상이 되면 다른 이름의 파일을 출력한다.
DailyRollingFileAppender : 하루를 단위로 로그 메시지를 파일에 출력한다.

SMTPAppender : 로그 메시지를 이메일로 보낸다
NTEventLogAppender : 윈도우의 이벤트 로그 시스템에 기록한다.

 

<encoder>부분에 출력될 로그 형식을 작성해주면 된다.

%d : 로그 기록 시간을 의미, { }를 통해 날짜 형식을 정해줄 수 있다.

%n : new line 한 줄 띄워준다.

%msg : 메시지 

%logger : 로거 이름의 축약

%c : 로깅이 발생한 카테고리를 출력한다.
%C : 로깅이 발생한 클래스명을 출력한다.

 

maxHistory : 보관 기간을 설정한다. 

 

2) logger

name : 사용하게 될 패키지 혹은 클래스 명을 입력한다.

level : log의 레벨 중 한 가지 선택한다.

 

3) root

default값을 저장해준다. 

 

 

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/tmp/access.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/tmp/access-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>
    
    <logger name="org.springframework" level="info"/>
    <logger name="kr.or.connect" level="debug"/>

    <root level="debug">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
    
</configuration>

+ Recent posts