티스토리 뷰

Programming/.common

Java Logging with Eclipse

가그린민트 2017. 11. 10. 14:43

개발 중에 디버깅을 위해 System.out.println을 사용할 경우, 매번 I/O 작업이 발생하여 성능을 떨어뜨린다. 이 경우, 개발 중 추가한 디버깅 메시지를 실 서비스하는 시점에서 제거하거나 주석처리를 해야 한다. ㅡㅡ.
이런 부분들은 Logging 라이브러리를 사용함으로써 해소할 수 있다. 대표적인 Logging 라이브러리로 SLF4J 인터페이스가 있으며, 구현체로는 log4j와 logback이 존재한다. (logback을 사용해야 하는 이유) 1. pom.xml에 dependency 추가

1
2
3
4
5
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
cs


2. src/main/resources/logback.xml 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <layout class="ch.qos.logback.classic.PatternLayout">
          <Pattern>%d{HH:mm:ss.SSS} [%-5level] [%thread] [%logger{36}] - %m%n</Pattern>
      </layout>
  </appender>
 
  <!-- 자바 패키지별 log level을 설정한다. -->
  <logger name="패키지명" level="ERROR" />
 
 
<!-- 기본 log level을 설정한다. -->
  <root level="ERROR">
      <appender-ref ref="STDOUT" />
  </root>
</configuration>
cs


3. log 작성

1
2
3
4
5
6
7
8
9
10
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Logging {
    
    private static final Logger LOG = LoggerFactory.getLogger(Logging.class);
    public static void main(String[] args) {
        LOG.debug("Hello Logback");
    }
}
cs


3-1 통합개발도구의 template 기능 활용 (Window->Preferences->Java -> Editor -> Templates)

1
2
${:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}
private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);
cs


3-2 slf4j에서 성능을 고려한 로그 메시지 생성String name = "example";log.debug("Hello Logback "+name);log level이 info 이상이더라도, "Hello Logback "+name 연산 후 log level을 판단하므로 불필요한 연산 발생 
logback에서는 log.debug("Hello Logback {}",name);


로그 레벨(log level)

TRACE < DEBUG < INFO < WARN < ERROR

설정 파일에서 로그 레벨 변경만으로 로그 메시지의 출력 여부를 결정할 수 있다.

즉, DEBUG 레벨로 설정하면 DEBUG 레벨보다 높은 로그 레벨의 메시지가 모두(DEBUG, INFO, WARN, ERROR) 출력된다. ERROR 레벨로 설정하면 ERROR 레벨의 로그만 출력되는 방식으로 동작한다.


(추가적으로) syslog처럼 java logging도 파일로도 남길 수 있고, 원격으로 보낼 수도 있다. 추후에 다양한 로깅방법들을 학습하고, ELK 스택 적용 방법에 대해서도 포스팅할 계획이다.



'Programming > .common' 카테고리의 다른 글

git flow  (0) 2018.06.17
HTML + CSS 연습  (0) 2017.11.16
RESTful API란 ?  (11) 2017.11.08
'객체 지향과 디자인 패턴' 후기  (0) 2017.10.02
blocking vs non-blocking / synchronous vs asynchronous  (0) 2017.09.01
댓글
링크
최근에 달린 댓글
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Total
Today
Yesterday