목차 >> Logging  
+- GlueLog  
----+- Activity Layer에서의 Logging  
----+- 그 외의 Logging

10장 Logging

어플리케이션 개발에 있어서 로깅은 중요합니다.
시스템 개발 또는 운영 중에 발생하는 버그들을 잡기 위해 디버깅할 때, 시스템 운영 중 시스템의 현 상태를 모니터링할 때, 로깅만큼 강력한 수단을 없기 때문입니다.
로그를 남기는 가장 쉬운 방법은 System.out.println()을 이용하는 것입니다. 그러나, 이러한 로그는 필요성이 다소 떨어지는 것도 포함하기 때문에, 필요성이 떨어지는 로그는 주석처리나 삭제가 필요할 수 있습니다. 또, 다른 개발자가 보았을때 해석하는데 어려움이 있을수 있습니다. 이번 장에서는 이러한 logging에 관련된 내용입니다.

GlueLog

자바 로깅 구현체(Logger)를 는 다음과 같이 여러 가지가 있으면, 어플리케이션을 개발시 이러한 구현체를 선택해서 사용합니다.

  • logback
  • log4j
  • commons-logging
  • JDK1.4 logging

Glue Framework 에서는 이러한 구현체의 종류와 상관없이 일관된 로깅 코드를 작성할수 있도록 GlueLog 를 제공하고 있습니다. GlueLog에서 제공하는 메소드는 Java Doc을 참고합니다. (GlueAPI)

그림 : GlueLog
GlueLog

GlueLog는 SLF4J(Simple Logging Facade for Java) API를 사용하고 있습니다. 그래서 다음 그림과 같이 classpath에 어떤 구현체가 있는지에 따라 해당 구현체로 바인딩되는 로깅을 수행 합니다.

그림 : 출처 - http://www.slf4j.org
SLF4J

Activity Layer에서의 Logging

GlueActivity의 JavaDoc에는 다음과 같은 Field가 있습니다 (GlueAPI 참고).

  • protected org.slf4j.Logger logger

    다음은 Activity 예제 코드 입니다.

    package sample.activity;
    
    import com.poscoict.glueframework.biz.activity.GlueActivity;
    import com.poscoict.glueframework.biz.control.GlueBizControlConstants;
    import com.poscoict.glueframework.context.GlueContext;
    
    public class LoggerTestActivity extends GlueActivity<GlueContext>
    {
        // Do not define the Class Member Variable!!
        public String runActivity( GlueContext ctx )
        {
            this.logger.info( "ServiceName : {}", ctx.get( GlueBizControlConstants.SERVICE_NAME ) );
            this.logger.debug( "This is '{}' activity", this.getName() );
    
            Object input = ctx.get( "input" );
            this.logger.debug( "data : {}", input );
    
            Object output = "Hello " + input + "!!!";
            ctx.put( "result", output );
    
            this.logger.trace( "{} : {} , next : {}", "result", output, GlueBizControlConstants.SUCCESS );
    
            return GlueBizControlConstants.SUCCESS;
        }
    }
    

그 외의 Logging

package test;

import com.poscoict.glueframework.biz.control.GlueBizControlConstants;
import com.poscoict.glueframework.biz.control.GlueBizController;
import com.poscoict.glueframework.biz.control.GlueBizProvider;
import com.poscoict.glueframework.context.GlueContext;
import com.poscoict.glueframework.context.GlueDefaultContext;
import com.poscoict.glueframework.util.log.GlueLog;
import com.poscoict.glueframework.util.log.GlueLogFactory;

public class LoggingTest
{
    public static void main( String[] args )
    {
        GlueLog logger = GlueLogFactory.getLogger( LoggingTest.class );
        
        GlueContext ctx = new GlueDefaultContext();
        ctx.put( GlueBizControlConstants.SERVICE_NAME, "hello-service" );
        ctx.put( "logging", "1" );
        ctx.put( "input", "Glue" );

        logger.debug( "{}", ctx );
        GlueBizController controller = GlueBizProvider.getController();
        controller.doAction( ctx );

        logger.info( "{}", ctx.get( "result" ) );
    }
}