New Logging Architecture

Toggle Space Navigation Tree
Space Map

문서를 정리하게 된 이유

Spring Batch 모듈을 어떻게 배포할지를 고민하다가 Spring DM Server까지 관심을 가지게 되었으며, Spring DM Server에 Batch 모듈을 배포했는데 Logging을 찍기가 이렇게 힘들 줄이야. 이렇게 해서 시작하게 된 것이 OSGi에서 Logging 방식에 대하여 공부하기 시작했으며, 그 동안 모르고 있던 놈들을 분석하기 시작했다. 그 동안 얼마나 기술적인 부분에 관심을 가지지 않고 있었는지 새삼 느끼게 되었다.

Overview

Classic Logging Framework

  • Apache Commons Logging
  • Log4J
  • SLF4J
  • JDK

String concatenating의 성능 이슈

  • 이 문제를 해결하기 위하여 일반적으로 다음과 같이 해결한다.
    if (logger.isDebugEnabled())
       logger.debug("message part 1" + aVar + "message part 2");
    
  • 위와 같이 해결할 경우 코드 가독성에 좋지 않다.
  • SLF4J는 parameterized message string을 이용하여 위 이슈를 해결하고 있다.
    logger.debug("message part 1 {} message part 2", aVar);
    
  • 이 이슈와 관련한 더 자세한 내용은 commons-logging은 안녕, SLF4J를 새로 사귑시다! 문서에 잘 설명되어 있다.

SLF4J는??

  • java.util.logging, log4j, logback와 같은 Logging Framework에 대한 Logging Facade. 과거에 Apache Commons Logging이 이와 같은 역할을 했다.
  • Apache Commons Logging은 Runtime시에 Logging Framework를 결정하기 때문에 Class Loader에 대한 이슈가 있었다. SLF4J는 deployment time에 Logging Framework를 결정한다.
  • OSGi는 이 같은 Apache Commons Logging에서 발생할 가능성이 Class Loader 이슈 때문에 SLF4J를 Logging Framework으로 사용하고 있다.

OSGi Bundle에서의 Logging

  • OSGi Bundle로 Logging Service를 지원하고 있으며, 이를 활용하여 해결할 수 있다.

참고 자료

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.