로깅 시 사용할 JRas 프로그래밍 인터페이스(사용되지 않음)
이 태스크 및 하위 태스크에서 설명한 JRas 프레임워크는 더 이상 사용되지 않습니다. 그러나 Java™ 로깅을 사용하여 유사한 결과를 얻을 수 있습니다.
일반 고려사항
파일 시스템 및 소켓과 같은 보호 설정된 자원에 대한 액세스를 제한하는 Java 2 보안을 사용하도록 WebSphere® Application Server를 구성할 수 있습니다. 사용자가 작성한 확장은 일반적으로 이러한 보호 설정된 자원에 액세스하므로, 사용자가 작성한 확장에는 AccessController doPrivileged 호출을 사용하는 적절한 보안 검사 호출이 들어 있어야 합니다. 또한 사용자가 작성한 확장에는 적절한 정책 파일이 있어야 합니다. 일반적으로 사용자가 작성한 확장은 별도의 패키지에서 보관하는 것이 좋습니다. 사용자가 작성한 확장에 대한 액세스를 적절하게 제한하는 것은 사용자의 책임입니다.
핸들러 작성
사용자가 작성한 핸들러는 RASIHandler 인터페이스를 구현해야 합니다. RASIHandler 인터페이스는 RASIMaskChangeGenerator 인터페이스를 확장하며, 이 인터페이스는 RASIObject 인터페이스를 확장합니다. 이러한 각 인터페이스가 도입한 메소드가 구현 포인터와 함께 간략히 설명됩니다. 특정 인터페이스나 메소드에 대한 자세한 정보는 해당 제품 API 문서를 참조하십시오.
RASIObject 인터페이스
- 독립형 JRas 로깅 툴킷은 기본적인 특성 파일 기반 구성을 지원합니다. 이 구성 지원을 구현하기 위해 구성 상태가 특성 파일에 키 값 쌍의 세트로 저장됩니다. public Hashtable getConfig 및 public void setConfig(Hashtable ht) 메소드가 구성 상태를 가져오고 설정하는 데 사용됩니다. JRas 확장은 특성 기반 구성을 지원하지 않습니다. 이들 메소드를 비조작으로 구현하십시오. 이들 메소드를 사용하여 자체 특성 기반 구성을 구현할 수 있습니다.
- 로거, 핸들러 및 포맷터는 이름 지정된 오브젝트일 수 있습니다. 예를 들어, JRas 확장에서 사용자는 관리자에서 검색된 로거의 이름을 제공해야 합니다. 핸들러의 이름을 지정할 수 있습니다. public String getName 및 public void setName(String name) 메소드는 이름 필드를 가져오거나 설정하기 위해 제공됩니다. JRas 확장은 현재 사용자 핸들러에서 이들 메소드를 호출하지 않습니다. 사용자는 비조작을 포함하여 원하는 대로 이러한 메소드를 구현할 수 있습니다.
- 로거, 핸들러 및 포맷터는 설명 필드를 포함할 수도 있습니다. public String getDescription 및 public void setDescription(String desc) 메소드를 사용하여 설명 필드를 가져오거나 설정할 수 있습니다. JRas 확장은 현재 설명 필드를 사용하지 않습니다. 사용자는 비조작을 포함하여 원하는 대로 이러한 메소드를 구현할 수 있습니다.
- RASManager 인터페이스에서 사용할 수 있는 public String getGroup 메소드가 제공됩니다. JRas 확장은 자체 Manager 클래스를 제공하기 때문에, 이 메소드는 절대 호출되지 않습니다. 이것을 비조작으로 구현하십시오.
RASIMaskChangeGenerator 인터페이스
RASIMaskChangeGenerator 인터페이스는 마스크 상태에 따라 이벤트 필터링에 대한 구현 메소드를 정의하는 인터페이스입니다. 이는 현재 로거와 핸들러 모두에 의해 구현됩니다. 정의에 따라 이 인터페이스를 구현하는 오브젝트는 사용되지 않더라도 메시지 마스크와 추적 마스크를 모두 포함합니다. 예를 들어, 메시지 로거에는 추적 마스크가 있지만 메시지 로거가 추적 이벤트를 생성하지 않으므로 추적 마스크는 전혀 사용되지 않습니다. 그러나 핸들러는 두 마스크 값을 활발하게 사용할 수 있습니다. 예를 들어, 단일 핸들러가 메시지와 추적 이벤트를 모두 처리할 수 있습니다.
- public long getMessageMask 및 public void setMessageMask(long mask) 메소드는 메시지 마스크 값을 가져오거나 설정하기 위해 사용됩니다. public long getTraceMask 및 public void setTraceMask(long mask) 메소드는 추적 마스크 값을 가져오거나 설정하는 데 사용됩니다.
또한 이 인터페이스는 마스크가 상태를 변경할 때 관련 상태에 대한 콜백 개념을 도입합니다. 콜백 오브젝트는 RASIMaskChangeListener 인터페이스를 구현해야 합니다.
- public void addMaskChangeListener(RASIMaskChangeListener listener) 및 public void removeMaskChangeListener(RASIMaskChangeListener listener) 메소드는 핸들러에 리스너를 추가하거나 제거하는 데 사용됩니다. public Enumeration getMaskChangeListeners 메소드는 현재 등록된 리스너 목록에 대한 열거를 리턴합니다. public void fireMaskChangedEvent(RASMaskChangeEvent mc) 메소드는 마스크 변경 이벤트를 알리기 위해 등록된 모든 리스너를 콜백하는 데 사용됩니다.
효율성을 위해 JRas 확장 메시지 및 추적 로거는 RASIMaskChangeListener 인터페이스를 구현합니다. 로거 구현은 자체 마스크 외에도 컴포지트 마스크를 유지보수합니다. 로거 컴포지트 마스크는 해당 로거에 등록된 모든 핸들러의 해당 마스크를 논리합한 다음 로거 자체 마스크의 결과를 논리곱하여 형성됩니다. 예를 들어, 메시지 로거의 컴포지트 마스크는 해당 로거에 등록된 모든 핸들러의 메시지 마스크를 논리합한 후 로거의 자체 메시지 마스크의 결과를 논리곱하여 만들어집니다.
모든 핸들러가 이들 메소드를 적절하게 구현해야 합니다. 또한 사용자 핸들러가 인스턴스화되었을 때, 추가되어야 하는 로거는 addMaskChangeListener 메소드를 사용하여 핸들러에 등록되어야 합니다. 핸들러의 메시지 마스크나 추적 마스크가 변경된 경우, 마스크 변경을 알리기 위해 로거를 콜백해야 합니다. 이 프로세스를 사용하여 로거는 컴포지트 마스크를 동적으로 유지보수할 수 있습니다.
RASMaskChangedEvent 클래스는 독립형 JRas 로깅 툴킷에 의해 정의됩니다. 이 컨텍스트에서는 사용자 코드에 의한 해당 클래스의 직접적인 사용이 지원됩니다.
추가적으로 RASIMaskChangeGenerator는 구현하는 오브젝트가 처리할 모든 메시지 및 추적 이벤트 클래스의 이름을 캐싱하는 개념을 도입합니다. 이러한 메소드의 인텐트는 GUI와 같은 관리 프로그램을 지원하고 이름 목록을 검색하고 클래스를 조사하여 처리 가능한 이벤트 유형을 판별하며 결과를 표시하는 것입니다. JRas 확장은 이러한 메소드를 호출하지 않으므로 비조작으로 구현할 수 있습니다.
- public void addMessageEventClass(String name) 및 public void removeMessageEventClass(String name) 메소드는 목록에서 메시지 이벤트 클래스 이름을 추가하거나 제거하기 위해 호출할 수 있습니다. public Enumeration getMessageEventClasses() 메소드는 메시지 이벤트 클래스 이름의 목록에 대한 열거를 리턴합니다. 비슷하게 public void addTraceEventClass(String name) 및 public void removeTraceEventClass(String name) 메소드는 목록에서 추적 이벤트 클래스 이름을 추가하거나 제거하기 위해 호출할 수 있습니다. public Enumeration getTraceEventClasses 메소드는 추적 이벤트 클래스 이름의 목록에 대한 열거를 리턴합니다.
RASIHandler 인터페이스
RASIHandler 인터페이스는 핸들러 작동에 특정한 메소드를 도입합니다.
독립형 JRas 로깅 툴킷에서 제공하는 대로 RASIHandler 인터페이스는 동기 또는 비동기 모드에서 실행되는 핸들러를 지원합니다. 비동기 모드에서는 일반적으로 이벤트가 호출 스레드에 의해 대기열에 넣어지고 작업자 스레드에 의해 기록됩니다. WebSphere Application Server 환경에서는 스레드 생성이 지원되지 않으므로, 명백하게 금지되지는 않지만 핸들러가 이벤트를 큐에 넣거나 일괄처리하지 않는 것으로 예상됩니다.
- public int getMaximumQueueSize() 및 public void setMaximumQueueSize(int size) 메소드는 최대 큐 크기를 관리하기 위해 IllegalStateException 예외를 작성합니다. public int getQueueSize() 메소드는 실제 큐 크기를 조회하기 위해 제공됩니다.
- public int getRetryInterval 및 public void setRetryInterval(int interval) 메소드는 다시 몇 가지 유형의 큐 처리를 암시하는 오류 재시도 개념을 지원합니다.
- public void addFormatter(RASIFormatter formatter), public void removeFormatter(RASIFormatter formatter) 및 public Enumeration getFormatters 메소드는 핸들러가 구성될 수 있는 포맷터 목록을 관리하기 위해 제공됩니다. 여러 가지 포맷터가 여러 가지 이벤트 클래스에 제공될 수 있습니다(적절한 경우).
- public void openDevice, public void closeDevice 및 public void stop 메소드는 핸들러가 추상화하는 기본 장치를 관리하기 위해 제공됩니다.
- public void logEvent(RASIEvent event) 및 public void writeEvent(RASIEvent event) 메소드는 처리를 위해 이벤트를 핸들러로 전달하기 위해 제공됩니다.
포맷터 작성
사용자가 작성한 포맷터는 RASIFormatter 인터페이스를 구현해야 합니다. RASIFormatter 인터페이스는 RASIObject 인터페이스를 확장합니다. RASIObject 인터페이스의 구현은 핸들러 및 포맷터에 모두 동일합니다. RASIFormatter 인터페이스가 도입한 메소드가 다음에 간략히 설명됩니다. 이 인터페이스가 도입한 메소드에 대한 자세한 정보는 해당 제품 API 문서를 참조하십시오.
RASIFormatter 인터페이스
- public void setDefault(boolean flag) 및 public boolean isDefault 메소드는 특정 포맷터가 기본 포맷터인지 판별하기 위해 독립형 JRas 로깅 툴킷이 제공하는 구체적 RASHandler 클래스에서 사용됩니다. 이들 RASHandler 클래스는 WebSphere Application Server 환경에서 절대 사용되지 않으므로, 사용자가 이들 메소드의 의미론적 중요성을 결정할 수 있습니다.
- public void addEventClass(String name), public void removeEventClass(String name) 및 public Enumeration getEventClasses 메소드는 포맷터가 형식화에 사용할 수 있는 이벤트 클래스를 판별하기 위해 제공됩니다. 사용자가 적절한 구현을 제공할 수 있습니다.
- public String format(RASIEvent event) 메소드는 핸들러 오브젝트에 의해 호출되고 이벤트의 형식화된 문자열 표시를 리턴합니다.