내용 목차
본 장에서는 JEUS Logging 시스템에 대해 JEUS의 로거 구조 및 각 로거와 핸들러를 설정하는 방법, 로그 메시지의 내용에 대한 설명한다. JEUS 로거 시스템은 Java SE Logging API를 기반으로 구현되었기 때문에 개발자는 이 API를 통해 JEUS Logging 시스템을 Customize할 수 있다.
JEUS Logging은 JEUS 실행 중에 시스템에서 수행되었던 일련의 작업들에 대한 내용을 순서대로 보관, 기록하는 작업이다. 이를 통해서 시스템 관리자는 JEUS에서 일어난 여러 작업들에 대한 내용을 이해하고, JEUS 실행 도중에 발생한 여러 에러 상황을 파악하여 그에 따른 대처를 할 수 있다.
JEUS는 시스템 및 애플리케이션에서 발생하는 여러 가지 상황들을 로그(log)를 통해 알려준다. JEUS는 Java SE에서 기본으로 제공되는 표준 Logging API(java.util.logging)를 사용한다. 따라서 Logging 시스템의 구조나 설정 방식도 Logging API를 따르며 로거(logger), 핸들러(handler), Formatter 구조를 그대로 반영하고 있다. 또한, 개발자가 Logging API를 이용하여 JEUS의 로거를 사용할 수 있다.
JEUS 로거는 노드와 엔진 컨테이너, 그리고 엔진 각각에 별도로 설정할 수 있다. 각 로거는 “jeus” 로거(여기서 “jeus”는 로거의 이름)를 기준으로 생성되어 있다. JEUS Manager와 엔진 컨테이너들은 모두 “jeus” 로거를 기본적으로 생성한다. 하위에 생기는 여러 가지 모듈들은 jeus.ejb 등과 같이 jeus 하위의 로거를 생성해서 사용한다.
이런 여러 가지 로거 중에서 JEUS 설정 파일에서 설정 가능한 로거는 다음과 같다.
jeus
jeus.systemuser
jeus.ejb
jeus.servlet
jeus.jms
jeus 로거의 하위 로거
java 로거
로거들에 대해 핸들러(handler)를 설정할 수 있는데, 이렇게 설정된 핸들러를 통해 로그 메시지를 기록한다. JEUS에서는 로그 메시지 output의 형태에 따라 여러 가지 종류의 핸들러를 설정할 수 있는데, 가장 많이 사용하는 것은 콘솔 핸들러(console handler)와 파일 핸들러(file handler)이다.
구분 | 설명 |
---|---|
콘솔 핸들러 | 로거를 통해 logging되는 로그 메시지를 콘솔 화면에 출력한다. |
파일 핸들러 | 로거를 통해 logging되는 로그 메시지를 파일로 저장한다. |
이 외의 핸들러에 대한 설명과 각 로거에 대한 핸들러를 JEUS 설정 파일에 설정하는 방법에 대해서도 역시 “11.3.1. 로거 설정”에서 설명한다. Logging 시스템에 대한 기본적인 이해는 Java SE의 Logging API를 참고한다.
로거를 사용하기 위한 기본 개념을 먼저 설명하고 실제 설정 방법을 설명한다.
파일 핸들러(file handler)를 사용할 경우 파일 이름을 따로 지정하지 않는다면 각 JEUS 로거의 로그 메시지는 정해진 위치에 파일을 생성한다. 그 외의 로그 파일은 Logging 설정을 하는 경우에만 생성된다.
다음은 각 로거의 기본 위치이다.
디폴트 컨테이너 사용할 경우(<node> 하위의 <system-logging>에 설정한다)
항목 | 설명 |
---|---|
jeus | JEUS Manager에서 남겨지는 로그는 JEUS_HOME\logs\<node-name> 디렉터리에 JeusServer.log 파일로 남겨진다. 각 엔진 컨테이너의 로그는 JEUS Manager에서 생성한 jeus 로거를 사용하여 로그를 남긴다. |
jeus.systemuser | 각 엔진 컨테이너의 user log는 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE 디렉터리에 UserLog.log 파일로 남겨진다. |
jeus.ejb | EJB 엔진의 로거는 실행되는 엔진 컨테이너 이름의 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE\ejb 디렉터리에 error.log 파일로 남겨진다. |
jeus.servlet | 서블릿 엔진의 로거는 실행되는 엔진 컨테이너 이름의 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE\servlet\errorlog 디렉터리에 error.log 파일로 남겨진다. |
jeus.jms | JMS 엔진의 로거는 실행되는 엔진 컨테이너 이름의 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE\jms 디렉터리에 error.log 파일로 남겨진다. |
jeus 로거의 하위 로거 | 엔진 로거를 제외한 "jeus" 로거의 모든 하위 로거는 JEUS_HOME\logs\<node-name> 디렉터리에 로거 이름을 가진 파일로 남겨진다. (예: jeus.jndi의 경우 jeus.jndi.log파일이 생성된다.) |
디폴트 컨테이너를 사용하지 않고 <engine-container> 하위의 <system-logging>에 설정한 경우
항목 | 설명 |
---|---|
jeus | 각 엔진 컨테이너의 로그는 JEUS_HOME\logs\<node-name>\<node-name>_<container-name> 디렉터리에 <node-name>_<container-name>.log 파일로 남겨진다. |
jeus.systemuser | 각 엔진 컨테이너의 user log는 JEUS_HOME\logs\<node-name>\<node-name>_<container-name> 디렉터리에 UserLog.log 파일로 남겨진다. |
jeus.ejb | EJB 엔진의 로거는 JEUS_HOME\logs\<node-name>\<node-name>_<container-name>\ejb 디렉터리에 error.log 파일로 남겨진다. |
jeus.servlet | 서블릿 엔진의 로거는 JEUS_HOME\logs\<node-name>\<node-name>_<container-name>\servlet\errorlog 디렉터리에 error.log 파일로 남겨진다. |
jeus.jms | JMS 엔진의 로거는 JEUS_HOME\logs\<node-name>\<node-name>_<container-name>\jms 디렉터리에 error.log 파일로 남겨진다. |
jeus 로거의 하위 로거 | 엔진 로거를 제외한 "jeus" 로거의 모든 하위 로거는 JEUS_HOME\logs\<node-name>_<container-name> 디렉터리에 로거 이름을 가진 파일로 남겨진다. (예: jeus.jndi의 경우 jeus.jndi.log파일이 생성된다.) |
디폴트 컨테이너를 사용하지 않는데 <node> 하위의 <system-logging>에 설정한 경우
항목 | 설명 |
---|---|
jeus | JEUS Manager에서 남겨지는 로그는 JEUS_HOME\logs\<node-name> 디렉터리에 JeusServer.log 파일로 남겨진다. |
jeus.systemuser | 각 엔진 컨테이너의 user log는 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE 디렉터리에 UserLog.log 파일로 남겨진다. |
jeus.ejb | EJB 엔진의 로거는 실행되는 엔진 컨테이너 이름의 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE\ejb 디렉터리에 error.log 파일로 남겨진다. |
jeus.servlet | 서블릿 엔진의 로거는 실행되는 엔진 컨테이너 이름의 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE\servlet\errorlog 디렉터리에 error.log 파일로 남겨진다. |
jeus.jms | JMS 엔진의 로거는 실행되는 엔진 컨테이너 이름의 JEUS_HOME\logs\<node-name>\SYSTEM_ENGINE\jms 디렉터리에 error.log 파일로 남겨진다. |
jeus 로거의 하위 로거 | 엔진 로거를 제외한 "jeus" 로거의 모든 하위 로거는 JEUS_HOME\logs\<node-name> 디렉터리에 로거 이름을 가진 파일로 남겨진다. (예: jeus.jndi의 경우 jeus.jndi.log파일이 생성된다.) |
디폴트 컨테이너의 경우는 로거 설정을 하더라도 무시된다. 매니저와 같은 JVM이기 때문에 매니저의 로거를 공유한다.
만약 매니저에는 로거 설정을 하지 않고 디폴트 컨테이너에만 로거 설정을 한 경우 설정이 적용되지 않는다. 이때 로거는 콘솔 핸들러만 사용해서 출력되고 레벨은 INFO이다.
JEUS에서 제공되는 로그의 포맷은 다음과 같다.
[시간] [레벨] [버전] [Logging되는 스레드 정보] [로그 메시지 ID] 로그 메시지
항목 | 설명 |
---|---|
시간 | '년.월.일 시간:분:초' 의 형식으로 출력된다. |
레벨 | 로그 레벨이 그에 매핑되는 숫자로 출력된다.
|
버전 | JEUS의 빌드 버전을 표시한다. |
Logging되는 스레드 정보 | Logging하는 프로세스(노드 또는 컨테이너 이름)와 스레드 번호로 표현되며, 이 둘은 하이픈('-')으로 구분된다. 스레드 정보가 같은 로그는 같은 스레드에서 Logging한 메시지이다. |
로그 메시지 ID | 로그를 출력하는 각 모듈에 대한 정보로 모듈 이름과 메시지 번호로 표현되며, 이 둘은 하이픈('-')으로 구분된다. 각 모듈에 해당하는 이름은 “11.2.5. 로그 메시지 모듈 이름”을 참고한다. |
로그 메시지 | 실제 로그 메시지를 출력한다. |
다음은 실제 JEUS 서버에 출력되는 로그 메시지의 예이다.
[예 11.1] 로그 메시지 출력
[2007.01.29 19:43:53][2][b007] [johan-10] [JNSS-0022] JEUS naming server successfully exported. ... [2007.01.29 19:43:54][2][b007] [johan-10] [JMX-0046] Create Jeus System MBeanServer ... [2007.01.29 19:44:23][0][b007] [johan-10] [MGR-0241] JeusServer is Ready
우선, 첫 번째 로그 메시지는 2007년 1월 29일 오후 7시 43분 53초에 출력된 레벨
2(INFO 레벨)의 메시지이며, 현재 실행되고 있는 JEUS의 버전은 build version b007라는 것을
알려준다. 또한 이 로그는 'johan'이라는 노드에서 10번 스레드에 의해 Logging되었고,
JNSS(JNSServer에 해당하는 모듈 이름)모듈의 22번 메시지가 출력되었음을 알 수 있다.
실제 로그 메시지는 JEUS의 Naming Server가 성공적으로 export되었음을 알려준다. 두 번째, 세 번째 로그 메시지 역시 첫번째 메시지와 같은 프로세스에서 Logging되었음을 할 수 있으며, 각각 JMX와 MGR(JEUSManager에 해당하는 모듈 이름)의 메시지가 출력되었음을 알 수 있다. 실제 로그의 내용도 JEUS의 MBean 서버와 JEUS 서버가 성공적으로 실행되었음을 알려주고 있다.
EJB 관련
구분 | 설명 |
---|---|
jeus.ejb.bean | EJB Home/Object stub 관련 로거 |
jeus.ejb.cluster | EJB 클러스터링 관련 로거 |
jeus.ejb.compiler | EJB stub compiler 관련 로거 |
jeus.ejb.connector | MDB와 리소스 어댑터 관련 로거 |
jeus.ejb.container | EJB 컨테이너 관련 로거 |
jeus.ejb.ejbserver | EJB 엔진 관련 로거 |
jeus.ejb.interop | EJB CORBA 연동 관련 로거 |
jeus.ejb.persistence | CMP 관련 로거 |
jeus.ejb.schema | EJB QL 관련 로거 |
jeus.ejb.timer | EJB Timer 관련 로거 |
jeus.ejb.transaction | EJB Transaction & Synchronization 관련 로거 |
jeus.ejb.webserver | EJB classftp 관련 로거 |
jeus.ejb.util | 기타 로거 |
JPA 관련
구분 | 설명 |
---|---|
jeus.persistence | JPA 모듈의 최상위 로거 |
jeus.persistence.provider | TopLink Essentials (default provider)의 최상위 로거 |
jeus.persistence.container | JPA에 대한 컨테이너 로거 |
서블릿 관련
구분 | 설명 |
---|---|
jeus.servlet.common | 서블릿 공통 모듈 관련 로거 |
jeus.servlet.connection | connector 관련 로거 |
jeus.servlet.connector | NIO connector 관련 로거 |
jeus.servlet.deployment | Deploy 관련 로거 |
jeus.servlet.engine | 서블릿 주요 처리 과정 관련 로거 |
jeus.servlet.filter | 필터 관련 로거 |
jeus.servlet.jsp | JSP 관련 로거 |
jeus.servlet.listener | 서블릿 Listener 관련 로거 |
jeus.servlet.loader | 클래스 로더 관련 로거 |
jeus.servlet.property | 프로퍼티 관련 로거 |
jeus.servlet.servlets | JEUS에서 제공하는 서블릿 관련 로거 |
jeus.servlet.util | 유틸리티에서 사용하는 로거 |
jeus.webserver | Class FTP 서비스에서 사용하는 로거 |
Session Manager 관련
구분 | 설명 |
---|---|
jeus.session | Session Manager의 최상위 로거, 공통적으로 사용되는 로거 |
jeus.session.central | 중앙 Session Manager의 로거 |
jeus.session.distributed | 분산 Session Manager의 로거 |
웹 서비스 관련
JAX-RPC/SAAJ 로거
구분 | 설명 |
---|---|
jeus.webservices.client | jeus.webservices.client 패키지(client invocation framework) 관련 로거 |
jeus.webservices.encoding | SOAP serialize/deserialize 관련 로거 |
jeus.webservices.message | SAAJ 및 SOAP 메시지 관련 로거 |
jeus.webservices.wsdl | WSDL 처리 관련 로거 |
jeus.webservices | 그 외 웹 서비스 관련 로거 |
UDDI 로거
구분 | 설명 |
---|---|
jeus.uddi.datastore | Database processing 관련 로거 |
jeus.uddi.function | UDDI API message processing 관련 로거 |
jeus.uddi.judy | Registry Server Engine 관련 로거 |
jeus.uddi.registry | Transport layer, Reqeust/Response processing, Registry 엔진 관련 로거 |
WS-* 로거 (JAX-RPC 기반)
구분 | 설명 |
---|---|
jeus.webservices.wss | ws-security 관련 로거 |
기타
구분 | 설명 |
---|---|
jeus.xml.binding.webservicesHelper | EWS(JSR109)에 사용되는 DD 바인딩 관련 로거 |
트랜잭션 관련
구분 | 설명 |
---|---|
jeus.transaction | 트랜잭션 매니저 전반적으로 사용하는 로거 |
jeus.transaction.logging | recovery에 사용되는 Resource Factory 관련 로거 |
jeus.transaction.ots | OTS 관련 로거 |
jeus.transaction.recovery | 트랜잭션 recovery 작업 내용을 기록하는 로거 |
Security 관련
구분 | 설명 |
---|---|
jeus.security | JEUS Security 관련 로거 |
jeus.security.impl.login | JEUS Security 로그인 서비스 관련 로거 |
jeus.security.util | JEUS Security 유틸리티 관련 로거 |
기타
구분 | 설명 |
---|---|
jeus.classloader | JEUS 클래스 로딩 관련 로거 |
jeus.clustering | JEUS 노드 클러스터링 관련 로거 |
jeus.connector | J2EE Connector 관련 로거 |
jeus.converter | XML 컨버터 관련 로거 |
jeus.ddinit | Deployment Descriptor Initializer 관련 로거 |
jeus.deploy | 애플리케이션 Deploy 관련 로거 |
jeus.io | JEUS Network I/O library 관련 로거 |
jeus.jdbc | JDBC Connection Pool 관련 로거 |
jeus.jmx | JMX 관련 로거 |
jeus.jndi | JNDI 관련 로거 |
jeus.jnlp | JNLP 관련 로거 |
jeus.jtmax | JTmax 관련 로거 |
jeus.management | JMX MBean Framework 관련 로거 |
jeus.net | JEUS Network API 관련 로거 |
jeus.netutil | JEUS 통합 포트 관련 로거 |
jeus.nodecontroller | JEUS 노드 콘트롤러 관련 로거 |
jeus.rmi | JEUS RMI 관련 로거 |
jeus.scheduler | JEUS 스케줄러 관련 로거 |
jeus.service | JEUS 서비스 MBean 관련 로거 |
JEUS의 각 엔진 컨테이너마다 제공되는 사용자 로거(user logger)는 개발자가 별도의 로거를 사용할 필요 없이 JEUS에서 제공하는 로거를 사용할 수 있도록 한다. Java SE Logging API의 java.util.logging.logger API를 사용해서 사용자 로거를 사용할 수 있다.
JEUS에서 제공되는 로그 메시지는 여러 가지 정보를 제공하고 있다. 그 중 로그 메시지의 형식에 따라 모듈의 정보를 출력하는 로그 메시지 정보에서는 각 모듈의 이름을 확인할 수 있다. 본 절에서는 로그에 출력되는 각 모듈 이름과 이에 해당하는 실제 모듈들에 대해 설명한다.
모듈 정보 | 모듈 이름 |
---|---|
C_Session | 중앙 집중식 세션 서버 |
Connector | Connector |
D_Session | 분산식 세션 서버 |
Deploy | 애플리케이션 Deploy |
EJB | EJB 엔진 |
JMX | JMX |
JNDI.Common | JNDI 공통 |
JNDI.Context | JNDI Context |
JNDI.Local | JNS(Local Naming Server) |
JNLP | JNLP |
JNSS | JNS 서버 |
JTMAX | jtmax |
MGR | 매니저(Manager) |
Monitor | |
Monitoring | |
NET | JEUS 네트워크 |
NIO | JEUS 네트워크 |
OTS | |
Scheduler | 스케줄러 |
Secutiry | JEUS Security |
Session | |
TM | 트랜잭션 매니저 |
TMRecovery | 트랜잭션 매니저 recovery |
UDDI | UDDI |
WEB | 서블릿 엔진 |
WebT | WebT |
WebtobLight | WebtoB |
WSS | 웹 서비스 Security |
WSVC | 웹 서비스 |
XML | Converter |
본 절에서는 JEUS에서 Logging에 대한 설정 방법과 커스터마이즈(customization) 방법을 설명한다.
다음은 JEUS 설정 파일에 설정 가능한 로거에 대한 설명이다.
항목 | 설명 |
---|---|
jeus | JEUS 시스템에서 사용하는 최상위의 로거이다. JEUSMain.xml <node>의 <system-logging> 항목에서는 JEUS Manager JVM의 jeus 로거를 설정하고, <engine-container>의 <system-logging>은 해당 엔진 컨테이너 JVM의 jeus 로거를 설정한다. 엔진 컨테이너에서는 <engine-container>의 <system-logging>항목이 없다면 <node>의 <system-logging> 항목에서 설정한 <level>을 따르게 된다. |
jeus.systemuser | 엔진 컨테이너의 user 로거에 해당한다. 따라서 JEUSMain.xml <engine-container>의 <user-logging>에 설정할 수 있다. |
jeus.ejb | EJB 엔진에서 사용하는 로거로 <node>나 <engine-container>의 <system-logging> 항목에 설정할 수 있고, 해당 EJB 엔진의 <engine-command>의 <system-logging> 항목에 설정할 수 있다. |
jeus.servlet | 서블릿 엔진에서 사용하는 로거로 <node>나 <engine-container>의 <system-logging> 항목에 설정할 수 있고, 해당 서블릿 엔진의 <engine-command>의 <system-logging> 항목에 설정할 수 있다. |
jeus.jms | JMS 엔진에서 사용하는 로거로 <node>나 <engine-container>의 <system-logging> 항목에 설정할 수 있고, 해당 JMS 엔진의 <engine-command>의 <system-logging> 항목에 설정할 수 있다. |
jeus 로거의 하위 로거 | 설정한 로거에 해당하는 서비스와 관련된 로거로 <node>나 <engine-container>의 <system-logging> 항목에 설정할 수 있다. |
이들 로거 중 jeus를 제외한 다른 로거들은 설정하지 않으면 상위 로거의 핸들러(handler)를 사용해서 로그 메시지를 출력한다. 또한 jeus 로거는 설정되지 않으면 콘솔 핸들러(console handler)를 사용한다. 따라서 JEUSMain.xml에 아무런 로거 설정이 되어 있지 않다면, JEUS Manager와 모든 엔진 컨테이너의 로그 메시지가 JEUS Manager의 콘솔창으로 보이게 된다. 이때 레벨(level)은 INFO이다. jeus 로거는 기본적으로 상위 로거의 핸들러를 사용하지 않는다.
엔진 컨테이너에 로거 설정을 하지 않으면 매니저에 설정한 로그 레벨을 따르게 된다. 이때 핸들러는 콘솔 핸들러이고 핸들러의 레벨은 기본값인 FINEST이다. 매니저에서 콘솔 핸들러의 레벨을 설정하였더라도 엔진 컨테이너의 콘솔 핸들러의 레벨은 FINEST로 매니저의 설정을 따르지 않는다. 매니저에 로그 설정에 따라서 콘솔창에 모든 레벨의 엔진 컨테이너 로그가 출력될 수도 있다.
다음은 로거의 설정에 예로 JEUSMain.xml의 <system-logging> 항목의 설정을 통해 Logging 설정을 할 수 있다. JEUS에서는 WebAdmin을 통해 설정하는 것을 권장한다.
[예 11.2] 로거 설정 : <<JEUSMain.xml>>
<jeus-system> . . . <node> <name>johan</name> . . . <engine-container> <name>container1</name> . . . <engine-command> <type>ejb</type> <name>engine1</name> </engine-command> <engine-command> <type>servlet</type> <name>engine1</name> </engine-command> . . . <!-- johan_container1 컨테이너에 로거를 설정 --> <system-logging> <!-- 컨테이너에 로거 설정이 없다면 노드에 설정한 로그레벨을 따른다. --> <level>INFO</level> <handler> <file-handler> <name>fileHandler</name> <valid-hour>1</valid-hour> </file-handler> </handler> </system-logging> <!-- johan_container1 컨테이너에 jeus.ejb 로거를 설정 --> <system-logging> <name>jeus.ejb</name> <level>FINEST</level> </system-logging> . . . </engine-container> . . . <!-- johan 노드(JEUS Manager)에 사용자 로거를 설정 --> <user-logging> <level>FINE</level> <use-parent-handlers>true</use-parent-handlers> <handler> <smtp-handler> <name>smtpHandler</name> <level>SEVERE</level> <smtp-host-address>mail.com</smtp-host-address> <from-address>jeus@mail.com</from-address> <to-address>admin@mail.com</to-address> <send-for-all-messages> false </send-for-all-messages> </smtp-handler> </handler> </user-logging> <!-- johan 노드(JEUS Manager)에 로거를 설정 --> <system-logging> <level>FINE</level> <handler> <console-handler> <name>consoleHandler</name> <level>INFO</level> </console-handler> <file-handler> <name>fileHandler</name> <level>FINE</level> <valid-hour>1</valid-hour> </file-handler> </handler> </system-logging> <!-- johan 노드(JEUS Manager)에 로그 파일 Rotation기능을 설정 --> <system-logging> <level>FINE</level> <handler> <console-handler> <name>consoleHandler</name> <level>INFO</level> </console-handler> <file-handler> <name>fileHandler</name> <enable-rotation>true</enable-rotation> <rotation-count>50</rotation-count> <valid-size>10240</valid-size> <append>false</append> </file-handler> </handler> </system-logging> </node> . . . </jeus-system>
다음은 <system-logging> 하위 설정 헝목에 대한 설명이다.
<handler>에는 콘솔 핸들러, 파일 핸들러, SMTP 핸들러, 소켓 핸들러, 사용자 핸들러가 있으며, 각 핸들러에 대해 다음과 같은 하위 항목들이 있다.
<console-handler>
콘솔 핸들러로 화면으로 로그 메시지를 출력하는 핸들러이다.
다음과 같은 기본적인 핸들러 설정만 가지고 있다.
<file-handler>
파일 핸들러로 파일로 로그 메시지를 출력하는 핸들러이다.
<console-handler>의 설정 이외에 다음과 같은 설정을 가지고 있다.
<smtp-handler>
SMTP 핸들러로 로그 메시지를 이메일(e-mail)로 전송하는 핸들러이다. 하나의 로그 메시지가 하나의 이메일로 전송된다.
<console-handler>의 설정 이외에 다음과 같은 설정을 가지고 있다.
<socket-handler>
소켓 핸들러로 로그 메시지를 소켓(socket)으로 전송하는 핸들러이다.
<console-handler>의 설정 이외에 다음과 같은 설정을 가지고 있다.
<user-handler>
사용자 핸들러로 사용자가 생성한 핸들러 클래스를 지정하는 항목이다.
<console-handler>의 설정 이외에 다음과 같은 설정을 가지고 있다.
JEUS는 JEUS가 시작될 때, 혹은 JEUS 운영 중에 설정한 시간이 되거나 파일사이즈를 넘으면 자동으로 이전에 Logging하던 파일의 이름은 바꾸고 새로 출력할 로그들은 원래의 로그 파일에 계속 Logging할 수 있도록 로그 파일 Rotation 기능을 제공한다.
valid-day, valid-hour, valid-size 설정에 따라 Rotation 한다. Rotation의 조건이 되는 3항목 중 아무 것도 설정되어 있지 않으면 로그 파일 사이즈가 1024KB가 되면 Logging하던 파일의 이름을 바꾸고 이 후에 Logging되는 파일은 이전에 Logging하던 파일에 새로 Logging한다.
다음은 로그 파일 Rotation에 대한 예제로 JEUSMain.xml의 <file-handler> 항목의 설정을 통해 Logging 설정을 할 수 있다. WebAdmin을 통해 설정할 수도 있다.
[예 11.3] 로그 파일 Rotation 설정 : <<JEUSMain.xml>>
<jeus-system> . . . <node> <name>johan</name> . . . <engine-container> <name>container1</name> . . . <!-- johan_container1 컨테이너에 로그 파일 Rotation기능을 설정 --> <system-logging> <level>FINE</level> <handler> <console-handler> <name>consoleHandler</name> <level>INFO</level> </console-handler> <file-handler> <name>fileHandler</name> <enable-rotation>true</enable-rotation> <rotation-count>50</rotation-count> <valid-hour>1</valid-hour> <append>false</append> </file-handler> </handler> </system-logging> </engine-container> . . . <!-- johan 노드(JEUS Manager)에 로그 파일 Rotation기능을 설정 --> <system-logging> <level>FINE</level> <handler> <console-handler> <name>consoleHandler</name> <level>INFO</level> </console-handler> <file-handler> <name>fileHandler</name> <enable-rotation>true</enable-rotation> <rotation-count>50</rotation-count> <valid-size>10240</valid-size> <append>false</append> </file-handler> </handler> </system-logging> </node> . . . </jeus-system>
<file-handler> 의 하위 항목 중 로그 파일 Rotation과 관련된 설정 다음과 같다.
JEUS에서는 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 기능을 제공한다. JEUS에서 기본으로 사용하는 포맷을 이용하여 JEUS 로거와 비슷한 형식으로 표준 출력와 표준 에러를 출력할 수 있다.
다음은 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 예제로 JEUSMain.xml에 <log-stdout-to-raw-format> 항목을 설정한다.
[예 11.4] 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력 : <<JEUSMain.xml>>
<jeus-system> <node> . . . <log-stdout-to-raw-format>true</log-stdout-raw-format> <engine-container> . . . <log-stdout-to-raw-format>false</log-stdout-raw-format> </engine-container> </node> </jeus-system>
항목 | 설명 |
---|---|
<log-stdout-to-raw-format> | 표준 출력과 표준 에러 메시지를 raw format 그대로 출력할지 로그 형식으로 출력할지를 설정한다. 엔진 컨테이너의 경우에 해당 설정이 없으면 매니저의 설정을 따른다. (기본값: true, raw format 그대로 출력) |
이 기능을 사용하면 표준출력은 다음과 같은 포맷으로 출력된다.
[시간] [레벨] [버전] [Logging되는 스레드 정보] [STDOUT/STDERR] 메시지
구분 | 설명 |
---|---|
시간 | '년.월.일 시간:분:초'의 형식으로 출력된다. |
레벨 | 로그 레벨이 매핑되는 숫자로 출력된다. 모두 SEVERE로 0으로 표시된다. |
버전 | JEUS의 빌드 버전을 표시한다. |
Logging되는 스레드 정보 | Logging하는 프로세스(노드 또는 컨테이너 이름)와 스레드 번호로 표현되며, 이 둘은 하이픈('-')으로 구분된다. 스레드 정보가 같은 로그는 같은 스레드에서 Logging한 메시지이다. |
STDOUT/STDERR |
|
메시지 | System.out이나 System.err를 통해 출력할 메시지이다. |
콘솔 툴(jeusadmin)이나 WebAdmin을 통해서 런타임(runtime)에 동적으로 설정을 변경할 수 있다.
jeusadmin
loglevel 명령어를 사용하여 Logging 설정을 동적으로 변경할 수 있다.
johan>loglevel -con johan_container1 jeus.ejb FINE
위의 예제는 loglevel 명령어를 사용하여 johan_container1에 있는 jeus.ejb의 로거 레벨을 FINE으로 변경하는 것을 보여주고 있다. 이 명령어에 대한 자세한 내용은 "JEUS Reference Book"의 jeusadmin commands를 참고한다.
WebAdmin
로그 설정 페이지에서 Logging 설정을 동적으로 변경할 수 있다.
시스템 프로퍼티 설정
XML 설정이 불가능한 경우에 시스템 프로퍼티로 설정할 수 있다.
Standalone 클라이언트에서 로거 설정을 할 경우
XML에서 설정이 불가능한 세부 로거 설정을 할 경우(예: -Djeus.transaction.log.level = FINE)
Logging 프로퍼티 파일
JEUS나 Java Logging 프로퍼티 파일에 Logging 설정을 할 수 있다.
JEUS Logging 프로퍼티(jeuslogging.properties) 파일
-Djeus.logging.propertyfile로 프로퍼티 파일 경로를 지정할 수 있다. (기본 경로: JEUS_HOME\config\jeuslogging.properties)
JEUS Logger를 밀리초 단위로 설정하려면 프로퍼티 파일 안에 'jeus.formatter=jeus.util.logging.SimpleMillisFormatter'를 추가한다.
Java Logging 프로퍼티(logging.properties) 파일
-Djava.util.logging.config.file로 프로퍼티 파일 경로를 지정할 수 있다.
(기본 경로: JEUS_HOME\bin\logging.properties)
JEUS 툴을 이용한 동적 설정을 제외한 나머지 설정들의 레벨 설정 우선순위는 다음과 같다.
시스템 프로퍼티
JEUS Logging 프로퍼티(jeuslogging.properties) 파일
Java Logging 프로퍼티(logging.properties) 파일
XML(JEUSMain.xml) Logging 설정
핸들러에 설정한 로그 레벨은 위에서 언급한 설정 우선 순위를 치환(Override)하는 것은 아니다. 하지만 최종적으로 핸들러를 통해서 로그가 출력되기 때문에 가장 높은 순위에 있다고 할 수 있다. 참고로 핸들러의 기본 로그 레벨은 FINEST이다.