Programming/OSGi2010. 10. 18. 14:33
OSGi Log 서비스도 OSGi 서비스 중 하나이다 그래서 ServiceTracker를 사용하던 SpringDM을 이용하여 Bean로 서비스를
가져오던 서비스를 등록하고 가져오는 기능 중에 하나이다.

OSGi Log 서비스

1. OSGi Log 서비스

           Log4j를 직접 사용하는 것도 가능하지만, OSGi에서는 간단하면서도 확장이 쉽고 좀더 동적인 변경이 가능한

           OSGi Service 기반의 Log 메커니즘을 R1버전부터 제공하며 래퍼(Wpapper)와 같은 기능을 한다.

           사용자가 로그를 입력하기 위해 LogService ServiceTracker에서 객체를 받아와 log메서드로 log를 입력해주면

           로그를 받을 클래스에 LogListener 인터페이스를 구현 후 ServiceTracker에서 LogReaderService객체를 받아와 로그

 를 받을 클래스를 LogReaderService addLogListener(this) 해주면 받을 준비 끝이다.

           이제 로그를 받으면 되는데 LogListener 인터페이스의 구현체인 loged(LogEntry)에서 받은 logEntry타일에서 로그

 정보를 추출하면 된다.

           각각의 객체 설명은 밑에 인터페이스를 참조

           1-1. OSGi Log 서비스에서 사용하는 4개의 중요 인터페이스

                     1-1-1. LogService: LOG_ERROR=1, LOG_WARNING=2, LOG_INFO=3, LOG_DEBUG=4

                                                                log(int logLevel, String msg)

                                                                log(int logLevel, String msg, Throwable ex)

                                                                log(ServiceReference sr, int logLevel, String msg)

                                                                log(ServiceReference sr, int logLevel, String msg, Throwable ex)

                     1-1-2. LogEntry: LogService에 의해 생성되어 객체로 log메서드를 호출시 입력되는 부가 정보들과 메시지

                                                                getBundle() => 해당 로그메시지를 생성한 번들 객체 호출

                                                                getSErviceReference() => 해당 로그메세지와 관련있는

erviceReference 객체 반환(log메서드 호출시 입력한 것만)

                                                                getLevel() => 로그의 레벨을 가져옴

                                                                getMessage() => 로그의 문자열 가져옴

                                                                getException() => 해당 로그메세지와 관련있는 Throwable객체 반환

       (log메서드 호출시 입력한 것만)

                                                                getTime() => 로그메시지가 만들어진 시간 가져옴

                     1-1-3. LogReaderService: LogEntry객체의 리스트를 저장하여 사용자에게 리턴해주는 서비스

                                                                getLog() => 로그 메시지를 최근 순으로 가져온다.(이쿼녹스의 경우

     100개 로그 저장 객수와 레벨 설정은 Configuration속성에서 변경 가능)

                                                                addLogListener => LogReaderService에서 Listener 추가

                     1-1-5. LogListener: 로그를 리스닝 할 수 있는 인터페이스로 LogReaderService add해 주어야 로그를

    받을 수 있다.

                                                                logged(LogEntry) => LogReaderService LogEntry객체가 추가

되었을 때 호출

2. OSGi Log를 구현한 jar파일

Maven을 사용한다면 dependency를 추가 하거나 아니며 log구현 jar파일이 필요

<dependency>

<groupId>org.apache.felix</groupId>

<artifactId>org.apache.felix.log</artifactId>

<version>1.0.0</version>

</dependency>

Posted by Brian B. Lee