이 장에서는 로깅을 구성하고 서버 로그를 보는 방법에 대해 간단하게 설명합니다. 이 장은 다음 내용으로 구성되어 있습니다.
Application Server는 JSR 047에 지정된 Java 2 플랫폼 로깅 API를 사용합니다. 일반적으로 Application Server 로깅 메시지는 domain-dir/logs/server.log에 위치한 서버 로그에 기록됩니다.
domain-dir/logs 디렉토리에는 서버 로그와 두 가지 다른 종류의 로그가 있습니다. access 하위 디렉토리에는 HTTP 서비스 액세스 로그가 있고, tx 하위 디렉토리에는 트랜잭션 서비스 로그가 있습니다. 이 로그에 대한 자세한 내용은 관리 콘솔 온라인 도움말을 참조하십시오.
Application Server 구성 요소는 로깅 출력을 생성합니다. 응용 프로그램 구성 요소에서도 로깅 출력을 생성할 수 있습니다.
응용 프로그램 구성 요소에서 Apache Commons Logging Library를 사용하여 메시지를 로그할 수 있습니다. 그러나 더 좋은 로그 구성을 위해서는 플랫폼 표준 JSR 047 API를 권장합니다.
로그 레코드는 다음과 같은 일관된 형식을 따릅니다.
[#|yyyy-mm-ddThh:mm:ss.SSS-Z|Log Level|ProductName-Version|LoggerName|Key Value Pairs|Message|#]
예를 들면 다음과 같습니다.
[#|2004-10-21T13:25:53.852-0400|INFO|sun-appserver-e8.1|javax.enterprise. system.core|_ThreadID=13;|CORE5004: Resource Deployed: [cr:jms/DurableConnectionFactory].|#]
이 예에서
[# 및 #]은 레코드의 시작과 끝을 표시합니다.
세로 막대(|)는 레코드 필드를 구분합니다.
2004-10-21T13:25:53.852-0400은 날짜와 시간을 지정합니다.
Log Level은 INFO입니다. 이 수준은 다음 값 중 하나일 수 있습니다. SEVERE, WARNING, INFO, CONFIG, FINE, FINER 및 FINEST
ProductName-Version은 sun-appserver-ee8.1입니다.
LoggerName은 로그 모듈의 소스를 식별하는 계층적 로거 이름 공간이며, 이 경우에는 javax.enterprise.system.core입니다.
Key Value Pairs는 키 이름과 값입니다. 대개는 _ThreadID=14; 같은 스레드 아이디입니다.
Message는 로그 메시지의 텍스트입니다. 모든 Application Server SEVERE 및 WARNING 메시지와 대부분의 INFO 메시지는 모듈 코드와 숫자 값(이 경우 CORE5004)으로 구성된 메시지 아이디로 시작합니다.
이후 릴리스에서 로그 레코드 형식이 변경되거나 향상될 수 있습니다.
이 절에서는 java.util.logging 패키지를 사용하고 Application Server의 로깅 하위 시스템에 액세스하는 응용 프로그램에 대한 사용자 정의 로깅 수준을 구성하는 방법에 대해 설명합니다.
java.util.logging 패키지는 로거 인스턴스를 만들 수 있는 계층적 이름 공간을 제공합니다. 인스턴스의 로그 파일은 특정 로깅 레코드가 Application Server에 출력되는지 여부에 상관없이 로그 레코드의 로그 수준 및 지정된 로그 수준에 따라 달라집니다.
Application Server 로거 설정 구성은 Application Server의 내부 로깅에 대한 미세 제어를 가능하게 하는 20개 이상의 로깅 모듈을 제공합니다. 또한, 모듈 이름 및 모듈이 사용해야 하는 로깅 수준을 지정함으로써 사용자 정의 추가 로그 모듈을 만들 수 있는 옵션도 있습니다.
여기서 중요한 점은 로거는 정적 이름이며 상속은 제공되지 않는다는 점입니다. 따라서, 이름이 com.someorg.app인 사용자 정의 로거가 구성되고 응용 프로그램에서 com.someorg.app.submodule 로거를 조회하는 경우 com.someorg.app.submodule에는 com.someorg.app의 설정을 상속하는 로거가 제공되지 않습니다. 대신, com.someorg.app.submodule은 INFO 이상의 수준으로 기록하도록 설정된 기본 로거를 갖습니다.
응용 프로그램에서 로거 상속을 사용해야 하는 경우에는 Application Server를 실행하는 데 사용하는 Java 런타임의 logging.properties 파일을 편집하여 이 com.someorg.app.submodule을 구성할 수 있습니다. 예를 들어, 다음 항목을 logging.properties 파일에 추가하면 com.someorg.app.submodule은 만들어질 때와 동일한 FINE 수준을 상속합니다.
com.someorg.app.level = FINE
Java 로깅 API에 대한 자세한 내용은 다른 java.util.logging 클래스 및 http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/package-summary.html의 Java 설명서를 참조하십시오.
Application Server는 각 모듈에 대한 로거를 제공합니다. 다음 표는 모듈 이름과 각 로거에 대한 이름 공간이 관리 콘솔의 로그 수준 페이지에 표시되는 알파벳 순서로 나열합니다. 표의 마지막 세 모듈은 로그 수준 페이지에 표시되지 않습니다.
표 15–1 Application Server 로거 이름 공간
모듈 이름 |
이름 공간 |
---|---|
관리 |
javax.enterprise.system.tools.admin |
클래스 로더 |
javax.enterprise.system.core.classloading |
CMP |
javax.enterprise.system.container.cmp |
구성 |
javax.enterprise.system.core.config |
커넥터 |
javax.enterprise.resource.resourceadapter |
CORBA |
javax.enterprise.resource.corba |
배포 |
javax.enterprise.system.tools.deployment |
EJB 컨테이너 |
javax.enterprise.system.container.ejb |
JavaMail |
javax.enterprise.resource.javamail |
JAXR |
javax.enterprise.resource.webservices.registry |
JAX-RPC |
javax.enterprise.resource.webservices.rpc |
JDO |
javax.enterprise.resource.jdo |
JMS |
javax.enterprise.resource.jms |
JTA |
javax.enterprise.resource.jta |
JTS |
javax.enterprise.system.core.transaction |
MDB 컨테이너 |
javax.enterprise.system.container.ejb.mdb |
이름 지정 |
javax.enterprise.system.core.naming |
노드 에이전트(Enterprise Edition에만 해당) |
javax.ee.enterprise.system.nodeagent |
루트 |
javax.enterprise |
SAAJ |
javax.enterprise.resource.webservices.saaj |
보안 |
javax.enterprise.system.core.security |
서버 |
javax.enterprise.system |
동기화(Enterprise Edition에만 해당) |
javax.ee.enterprise.system.tools.synchronization |
Util |
javax.enterprise.system.util |
검증자 |
javax.enterprise.system.tools.verifier |
웹 컨테이너 |
javax.enterprise.system.container.web |
코어 |
javax.enterprise.system.core |
시스템 출력(System.out.println) |
javax.enterprise.system.stream.out |
시스템 오류(System.err.println) |
javax.enterprise.system.stream.err |