제8장 Logging

내용 목차

8.1. 개요
8.2. JEUS 로거 기본 구조
8.2.1. 개요
8.2.2. Launcher 로거
8.2.3. 서버 로거
8.2.4. 액세스 로거
8.2.5. 사용자 로거
8.2.6. 로거 리스트
8.2.7. 로그 메시지 모듈 이름
8.3. Logging 설정
8.3.1. 로거 정보 확인
8.3.2. 동적으로 로거 설정
8.3.3. 표준 출력과 표준 에러를 로그 형식으로 출력 설정
8.3.4. 로거 설정
8.3.5. 로그 파일 로테이션(Log File Rotation) 설정
8.3.6. 프로퍼티 설정

본 장에서는 JEUS Logging 시스템에 대해 JEUS의 로거 구조 및 각 로거와 핸들러를 설정하는 방법, 로그 메시지의 내용에 대해서 설명한다.

8.1. 개요

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 로거 시스템은 Java SE Logging API를 기반으로 구현되었기 때문에 개발자는 이 API를 통해 JEUS Logging 시스템을 Customize할 수 있다.

JEUS 로거의 종류는 JEUS Launcher와 JEUS 서버, 그리고 WEB 엔진에서 사용되는 액세스 로그가 있다. 각 로거는 "jeus" 로거(여기서 "jeus"는 로거의 이름, 이하 jeus 로거)를 기준으로 생성되어 있다. JEUS 서버는 모두 "jeus" 로거를 기본적으로 생성한다. 하위에 생기는 여러 가지 모듈들은 jeus.ejb 등과 같이 jeus 하위의 로거를 생성해서 사용한다.

참고

"jeus" 로거는 JEUS 에서 사용되는 최상위 로거의 이름이다. 사용자가 설정하지 않아도 이 로거는 기본적으로 존재한다.

이런 여러 가지 로거 중에서 JEUS 설정 파일에서 설정 가능한 로거는 다음과 같다.

  • JEUS 로거

  • user 로거

  • 웹 엔진에서 사용하는 액세스 로거

  • JEUS 로거의 하위 로거

  • Java 로거

핸들러는 실제 로거에서 출력하려는 로그 메시지를 어떤 대상을 통해 기록하는 역할을 한다. 따라서 로거는 항상 핸들러를 동반한다. JEUS에서는 로그 메시지의 출력 대상에 따라 다음의 4가지 종류의 로거에 핸들러(handler)를 설정할 수 있고, 설정된 핸들러를 통해 로그 메시지가 기록된다. 이 중 가장 보편적으로 사용하는 것이 파일 핸들러(File Handler) 이다.

구분설명
파일 핸들러로거를 통해 logging되는 로그 메시지를 파일에 기록한다.
SMTP 핸들러로그 메시지를 메일을 통해 기록한다.
소켓 핸들러로그 메시지를 지정한 IP를 통해 기록한다.
user 핸들러사용자가 작성한 핸들러를 통해 로그 메시지를 기록한다.

이 외의 핸들러에 대한 설명과 각 로거에 대한 핸들러를 JEUS 설정 파일에 설정하는 방법에 대해서는 “8.3.1. 로거 정보 확인”에서 설명한다. Logging 시스템에 대한 기본적인 이해는 Java SE의 Logging API를 참고한다.

참고

1. JEUS 6까지는 콘솔 핸들러도 설정이 가능했지만 JEUS 7부터는 설정할 수 없다.

2. JEUS 7부터는 서버 프로세스의 콘솔은 존재하지 않는다. Launcher를 통해 서버를 부팅하기 때문에 Launcher 프로세스의 콘솔이지 서버 프로세스의 콘솔은 아니다.

3. 서버에서 발생하는 로그 메시지들을 콘솔로 출력하기 위해서는 Launcher 프로세스가 서버가 shutdown될 때까지 다운되지 않아야 한다. 서버를 띄울 때 -verbose 옵션을 주고 띄우면 Launcher 프로세스는 서버가 다운될 때까지 다운되지 않고 서버에서 발생하는 로그 메시지들을 파이프를 통해 읽어 콘솔로 출력한다.

4. JEUS 7 Fix#4 버전부터 Asynchronous logging를 지원한다. logging을 log를 호출한 worker thread에서 처리하지 않고 전담 logger thread에서 처리함으로서 JEUS 전체적인 성능의 향상을 위함이다. 이 방식에서는 logging이 지연될 수 있는 파일 핸들러 외의 나머지 핸들러는 지원하지 않는다. 만약 나머지 핸들러들을 쓰고 싶다면 jeus.logging.useAsync 옵션을 false로 설정한다. 또한 Asynchronous logging 방식에서는 jeus.access.logging.skip.when.busy 옵션을 true로 함으로서 성능에 민감한 web worker가 현재 logging이 밀려있어 기다리게 되는 현상을 자동으로 detect하여 access logger만큼은 기다리지 않고 넘어갈 수 있도록 지원한다.

8.2. JEUS 로거 기본 구조

본 절에서는 로거를 사용하기 위한 기본 개념을 설명하고 실제 설정 방법에 대해서 설명한다.

8.2.1. 개요

서버에 로거를 설정하지 않아도 최상위 로거인 jeus 로거는 기본적으로 존재한다. 파일 핸들러(File Handler)를 사용하고 매일 로그 파일이 로테이션될 수 있도록 한다. 로그 로테이션을 비롯한 파일 핸들러에 대한 자세한 내용은 “8.3.1. 로거 정보 확인”에서 설명한다.

참고

jeus 로거는 로거 삭제 명령으로 삭제할 수 없다. jeus 로거를 삭제하면 다른 로거를 설정하지 않은 경우 서버에 아무런 로그 메시지도 logging되지 않기 때문에 운영상 문제가 될 수 있다. 만약 서버에서 로거를 남기고 싶지 않다면 jeus 로거의 레벨을 OFF로 설정해야 한다.

도메인에 등록된 서버의 삭제 역시 해당 서버의 logs 디렉터리 삭제를 의미하지는 않는다. 로거는 관리자가 언제든지 열람할 수 있는 중요한 정보이기 때문에 필요없다고 판단하여 지우는 역활은 관리자의 몫이다.

로그 디렉터리 구조

로거에서 파일 이름을 별도로 지정하지 않았다면 JEUS에서는 정해진 위치에 로그 파일들을 생성한다. 로그 디렉터리의 구조는 다음과 같다.

[그림 8.1] 로그 디렉터리

로그 디렉터리


다음은 로그 디렉터리에 기본적으로 생성되는 로그 파일에 대한 설명이다.

servlet/access.log

웹 애플리케이션 요청에 대한 액세스 로그 파일이다. 기본적으로 서버의 모든 웹 애플리케이션으로 요청한 내용이 기록된다. 웹 엔진에 가상 호스트가 설정되어 있다면 servlet 디렉터리 하위에 가상 호스트 이름으로 디렉터리가 생성되고 그 하위에 access.log 파일을 생성하여 가상 호스트로 요청된 정보들이 logging한다.

JeusLauncher.log

Launcher에서 서버 기동을 위해 남기는 정보와 서버를 부팅할 때 발생하는 로그 메시지를 logging한다.

JeusServer.log

서버에서 logging하는 기본 로그 파일이다. 서버에 로거관련 설정을 하지 않았다면 jeus 로거를 포함한 하위 모든 로거에 대한 기본 로그 파일이 된다.

jvm.log

서버 JVM에서 발생하는 gc 로그나 Thread Dump 등이 기록된다. Launcher에서 서버를 시작할 때 특정 JVM 옵션을 넣기 때문에 생성되는 파일이다.

Launcher에서 서버를 시작할 때 JVM 옵션에 다음을 추가한다.

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=SERVER_HOME/logs/jvm.log

JVM 로그를 별도의 파일에 기록하도록 설정하는 이유는 서버가 백그라운드 프로세스로 동작하면서 서버의 Thread Dump가 더 이상 콘솔에 남지 않기 때문이다. 이 로그의 위치를 변경하려면 -XX:LogFile 옵션을 서버의 JVM 옵션에 추가해주면 기본 설정이 무시되고 사용자의 설정을 따른다.

사용자 정의 gc log file

Oracle의 경우 "-Xloggc:", IBM의 경우 "-Xverbosegclog:" 옵션을 사용하여 gc log file을 지정할 수 있다. 이때 JEUS에서는 지정된 파일 뒤에 자동으로 time stamp를 붙여서 JEUS를 띄울 때마다 생기는 gc log file을 구별할 수 있도록 한다.

특정 로그 디렉터리 설정

서버에서 생성하는 모든 로그(Rotation Backup 로그 포함)들을 특정 디렉터리에 저정하고 싶다면 WebAdmin을 사용해서 다음과 같이 설정한다.

WebAdmin 왼쪽 메뉴의 [Servers]를 선택하고 조회된 서버 목록에서 원하는 서버를 클릭하면 서버 설정화면으로 이동한다. [Basic] > [Basic Info] 메뉴에서 'Log Home' 항목에 원하는 특정 디렉터리 경로를 설정한다. 단, 개별 로그의 파일 생성 경로가 절대경로로 되어있다면 그 경로를 우선한다.

[그림 8.2] Log Home 경로 설정

Log Home 경로 설정


8.2.2. Launcher 로거

Launcher는 서버를 기동하기 위해 사용되는 프로세스이다. 실행 스크립트나 명령을 통해 서버를 기동시키면 Launcher 프로세스가 실행되고, Launcher에서는 설정 파일을 읽고 실제 서버를 시작시킨다. Launcher에서는 서버가 부팅되면서 발생하는 로그 메시지를 JeusLauncher.log 파일과 콘솔에 남긴다. Launcher 프로세스는 일반적으로 서버가 부팅을 완료하면 종료하여 서버의 부팅 로그만 Launcher 로거를 통해 남긴다. 하지만 서버를 실행할 때 -verbose 옵션을 주었다면 Launcher 프로세스는 서버의 부팅이 완료된 후에도 종료되지 않고 서버가 다운될 때까지 남겨지는 모든 로그 메시지를 Launcher의 콘솔과 파일을 통해 남긴다.

서버에서 서버 로거를 통해 logging하고 있는 로그 메시지들을 Launcher 프로세스에서 별도로 logging하는 이유는 서버 부팅 중에 서버에서 logging을 할 수 없는 상황에서 발생할 수 있는 오류 때문이다. 예를 들어 설정 파일 오류 등의 이유로 서버를 기동시키지 못했거나, 서버가 기동은 되었지만 부팅 실패로 인해 서버의 로거가 초기화되기 전에 종료되었다면 부팅 실패의 원인을 알 수 있는 로그 메시지들이 서버 로거를 통해 남을 수가 없다. 따라서 Launcher에서는 서버의 부팅 로그를 Launcher 자신의 로거를 통해 남겨서 사용자가 Launcher 로그를 확인하여 서버가 부팅할 때 발생한 오류를 해결할 수 있도록 한다. Launcher에 대한 자세한 내용은 “1.6. Launcher”를 참고한다.

[2016.08.24 12:38:52][0] [launcher-1] [XmlValidationEventHandler] [FATAL_ERROR]
Invalid content was found starting with element <system-clustering-framework> 
(of parent element <domain>). One of '{password-validator, admin-server-name}' 
is expected.

[2016.08.24 12:38:52][0] [launcher-1] [SERVER-0522] An exception occurred while 
processing [domain.xml].
<<__Exception__>>
jeus.xml.binding.JeusJAXBException: Unmarshalling the XML descriptor failed: 
domain.xml
class org.xml.sax.SAXParseException :
cvc-complex-type.2.4.a: Invalid content was found starting with element 
'system-clustering-framework'. One of '{"http://www.tmaxsoft.com/xml/ns/jeus":password-validator, 
"http://www.tmaxsoft.com/xml/ns/jeus":admin-server-name}' is expected..
  at jeus.xml.binding.BindingHelper.getDescriptor(BindingHelper.java:96)
  at jeus.service.descriptor.DescriptorFile.getDeploymentDescriptor(DescriptorFile.java:210)
  at jeus.service.descriptor.JEUSDomainDescriptorFile.getConfigDescriptor(JEUSDomainDescriptorFile.java:54)
  at jeus.launcher.Launcher.initDomainType(Launcher.java:222)
  at jeus.launcher.Launcher.readDescriptor(Launcher.java:210)
  at jeus.launcher.Launcher.start(Launcher.java:105)
  at jeus.launcher.Launcher.main(Launcher.java:58)

8.2.3. 서버 로거

서버가 운영되는 동안 발생하는 로그 메시지를 logging한다. 각 로그 메시지들은 서버가 운영 중에 하는 작업들에 대한 정보를 함축적으로 나타낸다.

JEUS의 기본 로거는 최상위 로거인 jeus 로거이고, jeus 로거의 하위 로거들은 jeus 로거의 핸들러를 통해 logging된다. 서버에서 logging되는 로거는 동적으로 추가, 삭제, 변경이 가능하다. 핸들러 역시 동적 추가, 삭제, 변경이 가능하다.

로그 메시지의 포맷은 formatter class를 통해 변경 가능하다. 아무런 설정이 없다면 다음과 같은 형태로 출력되는 JEUS에서 제공하는 기본 포맷터인 jeus.util.logging.SimpleFormatter가 사용된다.

  • 로그 형식

    [시간] [레벨] [Thread 정보] [로그 메시지 ID] 로그 메시지
    항목설명
    시간"년.월.일 시간:분:초"의 형식으로 출력된다.
    레벨

    로그 레벨이 그에 매핑되는 숫자로 출력된다.

    • 0: SEVERE

    • 1: WARNING

    • 2: INFO

    • 3: CONFIG

    • 4: FINE

    • 5: FINER

    • 6: FINEST

    • 7: ALL

    Thread 정보로그 메시지를 logging하는 Thread 정보를 나타낸다. logging하는 프로세스와 Thread 번호로 표현되며, 이 둘은 하이픈(-)으로 구분된다. Thread 정보가 같은 로그 메시지는 같은 Thread에서 logging한 것이다.
    로그 메시지 ID로그를 출력하는 각 모듈에 대한 정보로 모듈 이름과 메시지 번호로 표현되며, 이 둘은 하이픈(-)으로 구분된다. 각 모듈에 해당하는 이름은 “8.2.7. 로그 메시지 모듈 이름”을 참고한다.
    로그 메시지운영 중에 발생한 일에 대한 의미를 함축하고 있는 로그 메시지이다.

참고

Launcher 프로세스에서 logging되는 로그 메시지도 logging되는 프로세스만 다르고 서버에서 logging하는 로그 포맷과 다르지 않다.

다음은 실제 JEUS 서버에 출력되는 로그 메시지의 예이다.

[2016.08.24 10:36:17][0] [adminServer-1] [SERVER-0000] Version information - JEUS 8 (8.0.0.0-b83).
[2016.08.24 10:36:17][0] [adminServer-1] [SERVER-0001] java.specification.version=[1.7], java.runtime.version=[1.7.0_75-b13], vendor=[Oracle Corporation]
[2016.08.24 10:36:17][2] [adminServer-1] [SERVER-0002] Domain=[domain1], Server=[adminServer], baseport=[9736], pid=[9316]
[2016.08.24 10:36:17][2] [adminServer-1] [SERVER-0004] The current system time zone : Korea Standard Time
[2016.08.24 10:36:17][2] [adminServer-1] [WSVC-3805] JAX-RS Implementation libraries are added to the classpath of RootClassLoader: [library-ref:name=jax-rs, specVersion=2.0.1, implVersion=0]
[2016.08.24 10:36:17][2] [adminServer-1] [SERVER-0571] All JEUS system properties have been confirmed.
[2016.08.24 10:36:17][2] [adminServer-1] [SERVER-0568] Service address='0.0.0.0:9736', hostname='hahehihowin7', representation ip='192.168.15.45'
[2016.08.24 10:36:17][2] [adminServer-1] [SERVER-0561] The default RMI export port = 9743 and bind address = /0.0.0.0.

우선, 첫 번째 로그 메시지는 2016년 8월 24일 오전 10시 36분 17초에 출력된 레벨 2(INFO 레벨)의 메시지라는 것을 알려준다. 이 로그 메시지는 adminServer라는 서버에서 1번 Thread에 의해 logging되었고, SERVER 모듈의 000번 메시지가 출력되었음을 알 수 있다. 실제 이 로그 메시지는 JEUS 서버가 부팅을 시작했음을 알리는 서버의 최초 메시지이다. JEUS의 버전 정보도 함께 출력된다.

다른 로그 메시지들 역시 첫 번째 메시지와 같은 프로세스에서 logging되고, SERVER 모듈의 메시지가 출력된 것을 알 수 있다. 위 로그 메시지들은 서버가 부팅할 때 발생하는 것으로 Java 버전, 프로세스 ID, TimeZone, 네트워크 정보와 같은 환경 정보를 출력하고 있다.

JEUS에서는 서버 로거의 포맷터로 기본 포맷터인 jeus.util.logging.SimpleFormatter 이외에도 jeus.util.logging.SimpleMillisFormatter를 추가적으로 제공한다. 이 포맷터는 기본 포맷터와 거의 비슷한 포맷이고, Milli Second까지 포함된 시간까지 출력된다.

다음은 SimpleMillisFormatter를 설정했을 때 발생하는 로그 메시지의 예이다. 포맷터 설정에 대한 자세한 내용은 “8.3. Logging 설정”을 참고한다.

[2016.08.24 10:42:51.385][0] [adminServer-1] [SERVER-0000] Version information - JEUS 8 (8.0.0.0-b83).
[2016.08.24 10:42:51.385][0] [adminServer-1] [SERVER-0001] java.specification.version=[1.7], java.runtime.version=[1.7.0_75-b13], vendor=[Oracle Corporation]
[2016.08.24 10:42:51.387][2] [adminServer-1] [SERVER-0002] Domain=[domain1], Server=[adminServer], baseport=[9736], pid=[13364]
[2016.08.24 10:42:51.387][2] [adminServer-1] [SERVER-0004] The current system time zone : Korea Standard Time
[2016.08.24 10:42:51.560][2] [adminServer-1] [WSVC-3805] JAX-RS Implementation libraries are added to the classpath of RootClassLoader: [library-ref:name=jax-rs, specVersion=2.0.1, implVersion=0]
[2016.08.24 10:42:51.560][2] [adminServer-1] [SERVER-0571] All JEUS system properties have been confirmed.
[2016.08.24 10:42:51.568][2] [adminServer-1] [SERVER-0568] Service address='0.0.0.0:9736', hostname='hahehihowin7', representation ip='192.168.15.45'
[2016.08.24 10:42:51.580][2] [adminServer-1] [SERVER-0561] The default RMI export port = 9743 and bind address = /0.0.0.0.

8.2.4. 액세스 로거

액세스 로거는 사용자의 애플리케이션 요청이 어떻게 처리되는지를 남기기 위한 용도로 사용된다. 웹 애플리케이션으로의 요청에 대한 정보가 기록된다. 본 절에서는 웹 엔진에서의 액세스 로거에 대해 설명한다.

웹 엔진에서의 액세스 로거

웹 엔진 액세스 로거는 웹 엔진이 처리한 모든 요청을 기록한다. 액세스 로거로 기록되는 로그는 웹 애플리케이션에 접근한 정보와 기록할 내용을 지정하여 관리자가 필요한 정보를 얻을 수 있다. 웹 엔진으로 요청이 들어와 해당 요청을 모두 처리하고 그 응답을 보낸 후 액세스 로거는 설정된 정보를 기록한다.

웹 엔진 액세스 로거로 기록되는 로그들은 기본적으로 공통 로그 형식(Common Log Format)을 지원한다. 이 형식은 Apache와 같은 많은 곳에서 공통으로 사용하고 있으므로 로그를 액세스 분석하는 데 많은 정보를 얻을 수 있다. 특히 로그 분석 도구의 경우 공통 로그 형식을 분석하는 도구들이 많이 있으므로 이 도구들을 이용하면 웹 엔진의 액세스 로그를 분석하는 데 큰 도움이 된다.

경고

JEUS 6까지는 공통 로그 형식을 지원하지 않았다.

그리고 웹 엔진의 경우 가상 호스트를 설정할 수 있는데 가상 호스트를 설정한 경우 가상 호스트별로 액세스 로거를 설정해서 별도의 액세스 로그를 수집할 수 있다. 이때 가상 호스트의 액세스 로그는 다음의 파일명으로 남게 된다.

SERVER_HOME/logs/servlet/가상 호스트명/access.log

웹 엔진 액세스 로그의 기본 형식으로 액세스 로그를 남겼다면 다음과 같은 로그들이 access.log에 남는다.

192.168.15.57 [29/Aug/2016:17:37:02 +0900] "GET /example/test1.jsp HTTP/1.1" 200 5 38        

위 로그는 192.168.15.57 IP로부터 /example/test1.jsp 요청의 결과 정상적으로 38Byte의 응답을 29/Aug/2016:17:37:02 +0900 시간에 보냈다는 것을 의미한다. 보다 자세한 로그 형식은 공통 로그 형식에 대한 문서를 참고한다.

기록되는 로그의 형식을 바꾸거나 그 외의 웹 엔진 액세스 로거의 설정에 대한 자세한 내용은 JEUS Web Engine 안내서”의 절 1.6.10. “액세스 로그 기본 설정”을 참고한다.

8.2.5. 사용자 로거

JEUS의 각 서버마다 제공되는 사용자 로거(user logger)는 개발자가 별도의 로거를 사용할 필요없이 JEUS에서 제공하는 로거를 사용할 수 있도록 한다. Java SE Logging API의 java.util.logging.logger API를 사용해서 사용자 로거를 사용할 수 있다.

8.2.6. 로거 리스트

다음은 로거 목록에 대한 설명이다.

  • EJB 관련

    구분설명
    jeus.ejb.beanEJB Home/Object Stub 관련 로거
    jeus.ejb.clusterEJB 클러스터링 관련 로거
    jeus.ejb.compilerEJB Stub Compiler 관련 로거
    jeus.ejb.connectorMDB와 리소스 어댑터 관련 로거
    jeus.ejb.containerEJB 컨테이너 관련 로거
    jeus.ejb.ejbserverEJB 엔진 관련 로거
    jeus.ejb.interopEJB CORBA 연동 관련 로거
    jeus.ejb.persistenceCMP 관련 로거
    jeus.ejb.schemaEJB QL 관련 로거
    jeus.ejb.timerEJB Timer 관련 로거
    jeus.ejb.transactionEJB Transaction & Synchronization 관련 로거
    jeus.ejb.webserverEJB Class FTP 관련 로거
    jeus.ejb.util기타 로거
  • JPA 관련

    구분설명
    jeus.persistenceJPA 모듈의 최상위 로거
    jeus.persistence.providerTopLink Essentials(default provider)의 최상위 로거
    jeus.persistence.containerJPA에 대한 컨테이너 로거
  • Servlet 관련

    구분설명
    jeus.servlet.commonServlet 공통 모듈 관련 로거
    jeus.servlet.connectionConnector 관련 로거
    jeus.servlet.connectorNIO Connector 관련 로거
    jeus.servlet.deploymentDeploy 관련 로거
    jeus.servlet.engineServlet 주요 처리 과정 관련 로거
    jeus.servlet.filter필터 관련 로거
    jeus.servlet.jspJSP 관련 로거
    jeus.servlet.listenerServlet Listener 관련 로거
    jeus.servlet.loader클래스 로더 관련 로거
    jeus.servlet.property프로퍼티 관련 로거
    jeus.servlet.servletsJEUS에서 제공하는 Servlet 관련 로거
    jeus.servlet.util유틸리티에서 사용하는 로거
    jeus.websocketwebsocket 서버에 대한 모든 로거
    jeus.webserverClass FTP 서비스에서 사용하는 로거

  • Session Manager 관련

    구분설명
    jeus.sessionSession Manager의 최상위 로거, 공통적으로 사용되는 로거
    jeus.session.distributed분산식 Session Manager의 로거
  • 웹 서비스 관련

    • JAX-RPC/SAAJ 로거

      구분설명
      jeus.webservices.clientjeus.webservices.client 패키지(client invocation framework) 관련 로거
      jeus.webservices.encodingSOAP serialize/deserialize 관련 로거
      jeus.webservices.messageSAAJ 및 SOAP 메시지 관련 로거
      jeus.webservices.wsdlWSDL 처리 관련 로거
      jeus.webservices그 외 웹 서비스 관련 로거
    • UDDI 로거

      구분설명
      jeus.uddi.datastoreDB 프로세싱 관련 로거
      jeus.uddi.functionUDDI API 메시지 프로세싱 관련 로거
      jeus.uddi.judyRegistry Server Engine 관련 로거
      jeus.uddi.registryTransport layer, Reqeust/Response 프로세싱, Registry 엔진 관련 로거
    • WS-* 로거 (JAX-RPC 기반)

      구분설명
      jeus.webservices.wssws-security 관련 로거
    • 기타

      구분설명
      jeus.xml.binding.webservicesHelperEWS(JSR109)에 사용되는 DD 바인딩 관련 로거
  • 트랜잭션 관련

    구분설명
    jeus.transaction트랜잭션 매니저 전반적으로 사용하는 로거
    jeus.transaction.loggingRecovery에 사용되는 Resource Factory 관련 로거
    jeus.transaction.otsOTS 관련 로거
    jeus.transaction.recovery트랜잭션 Recovery 작업 내용을 기록하는 로거
  • Security 관련

    구분설명
    jeus.securityJEUS Security 관련 로거
    jeus.security.impl.loginJEUS Security 로그인 서비스 관련 로거
    jeus.security.utilJEUS Security 유틸리티 관련 로거
  • 기타 주요 로거

    구분설명
    jeus.classloaderJEUS 클래스 로딩 관련 로거
    jeus.clusteringJEUS 서버 클러스터링 관련 로거
    jeus.configJEUS 동적 설정 변경 관련 로거
    jeus.connectorJ2EE Connector 관련 로거
    jeus.converterXML 컨버터 관련 로거
    jeus.ddinitDD Initializer 관련 로거
    jeus.deploy애플리케이션 Deploy 관련 로거
    jeus.domain도메인 관련 로거
    jeus.filetransfer설정 파일, 애플리케이션 파일 전송 관련 로거
    jeus.ioJEUS Network I/O Library 관련 로거
    jeus.jdbcJDBC Connection Pool 관련 로거
    jeus.jmxJMX 관련 로거
    jeus.jndiJNDI 관련 로거
    jeus.jnlpJNLP 관련 로거
    jeus.jtmaxJTmax 관련 로거
    jeus.managementJMX MBean Framework 관련 로거
    jeus.netJEUS Network API 관련 로거
    jeus.nodeSSH 노드 매니저 관련 로거
    jeus.nodemanagerJava 노드 매니저 관련 로거
    jeus.rmiJEUS RMI 관련 로거
    jeus.schedulerJEUS 스케줄러 관련 로거
    jeus.serviceJEUS 서비스 MBean 관련 로거
    jeus.weldJEUS CDI 관련 로거

8.2.7. 로그 메시지 모듈 이름

JEUS에서 제공되는 로그 메시지는 여러 가지 정보를 제공하고 있다. 그 중 로그 메시지의 형식에 따라 모듈의 정보를 출력하는 로그 메시지 정보에서는 각 모듈의 이름을 확인할 수 있다. 본 절에서는 로그에 출력되는 각 모듈 이름과 이에 해당하는 실제 모듈들에 대해 설명한다.

모듈 이름모듈 정보
ConnectorConnector
Console콘솔 커맨드
Config설정 파일 동기화와 관련 모듈
CORBACORBA
CPOOLConnection
D_Session분산식 세션 서버
Deploy애플리케이션 Deploy
Domain도메인
EJBEJB 엔진
JDBCJDBC
JMSJMS 엔진
JMSCJMS Clustering
JMSFJMS Failover
JMXJMX
JMXRJMX Remote
JNDI.CommonJNDI 공통
JNDI.ContextJNDI Context
JNDI.LocalJNDI Local 클라이언트
JNDI.RemoteJNDI Remote 클라이언트
JNSSJNDI 서버
JPAJPA
JTMAXJTmax
LauncherJEUS Launcher (Launcher 프로세스)
NetworkJEUS 네트워크
NodeManager노드 매니저
OTSOTS
SCFSCf(JEUS System Clustering Framwork)
Scheduler스케줄러
SecutiryJEUS Security
SERVER서버 부트, 다운, 모니터링 관련 모듈
Session세션 서버
TM트랜잭션 매니저
TMRecovery트랜잭션 매니저 Recovery
UDDIUDDI
WEB서블릿 엔진
WebTWebT
WebtobLightWebtoB
WSS웹 서비스 Security
WSVC웹 서비스

8.3. Logging 설정

본 절에서는 JEUS에서 Logging에 대한 설정 방법과 Customization 방법 등을 설명한다.

8.3.1. 로거 정보 확인

JEUS 로거 중 jeus 로거는 설정이 없더라도 기본적으로 존재한다. 그러나 jeus 로거를 제외한 다른 로거들은 설정하지 않으면 상위 로거(jeus 로거)의 핸들러(handler)를 사용해서 로그 메시지를 출력한다. jeus 로거는 설정되지 않으면 파일 핸들러(File Handler)를 사용한다. 따라서 서버에 아무런 로거 설정을 하지 않았다면 서버가 운영되면서 발생하는 로그 메시지는 디폴트 로그 파일에 남게 된다. 이때 로그 레벨(level)은 INFO이다. jeus 로거는 상위 로거의 핸들러를 사용하지 않는다.

참고

서버의 로그 메시지를 콘솔에서 확인하고 싶다면 서버를 부팅할 때 -verbose 옵션을 설정한다. 옵션을 설정하면 Launcher 프로세스가 서버를 부팅시킨 후 종료되지 않고 서버가 shutdown될 때까지 살아있으면서 서버의 로그 메시지를 파이프를 통해 읽어서 콘솔에 출력하는 기능을 한다.

본 절에서는 콘솔 툴과 WebAdmin을 사용해서 서버에 기본적으로 존재하는 jeus 로거에 대한 정보를 확인하는 예를 설명한다.

WebAdmin 사용

WebAdmin의 왼쪽 메뉴에서 [Servers]를 선택하고 조회된 서버 목록에서 원하는 서버를 클릭한다. [Basic] > [System Logging] 메뉴에서 jeus 로거에 대한 정보를 확인할 수 있다.

[그림 8.3] WebAdmin을 통한 JEUS 로거에 대한 정보 확인

WebAdmin을 통한 JEUS 로거에 대한 정보 확인


콘솔 툴 사용

콘솔 툴에서 다음과 같이 log-level, list-log-handlers 명령을 수행하면 jeus 로거와 그에 등록된 핸들러에 대한 정보를 확인할 수 있다. 각 명령의 사용 방법에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.3. Server Management 관련 명령어”를 참고한다.

[DAS]domain1.adminServer>log-level -server server1 jeus
The logger[jeus] information for the server [server1]
Information about the logger[jeus].
================================================================================
Logger Name : jeus
Level : INFO
Use Parent Handlers : false

+---------------------------------------------+----------------+---------------+
|                 Handler Name                |  Handler Type  | Handler Level |
+---------------------------------------------+----------------+---------------+
| jeus.util.logging.ConsoleHandler@2569862    | ConsoleHandler | ALL           |
| FileHandler                                 | FileHandler    | FINEST        |
+---------------------------------------------+----------------+---------------+
================================================================================

[DAS]domain1.adminServer>modify-logger -server server1 jeus
Show the current configuration.
The logger[jeus] information for the server [server1]
================================================================================
+---------------------+--------------------------------------------------------+
|         Name        |                          Value                         |
+---------------------+--------------------------------------------------------+
| Level               | INFO                                                   |
| Use Parent Handlers | false                                                  |
| Formatter           | jeus.util.logging.SimpleFormatter                      |
+---------------------+--------------------------------------------------------+
================================================================================

[DAS]domain1.adminServer>list-log-handlers -server server1 jeus
List of Loggers
================================================================================
+-------------------------------------+----------------------------------------+
| Handler Name                        | FileHandler                            |
| Handler Type                        | FileHandlerType                        |
| Handler Level                       | FINEST                                 |
| Filename                            | JeusServer.log                         |
| Enable Rotation                     | true                                   |
| Rotation Directory                  | ${SERVER_HOME}/logs                    |
| Valid Day                           | 1                                      |
| Buffer Size                         | 1024                                   |
| Append Logs                         | true                                   |
+-------------------------------------+----------------------------------------+
================================================================================

콘솔 툴을 통해 JEUS 로거 정보를 확인했을 때 콘솔 핸들러가 보여지는 경우는 2가지이다.

  • 서버를 부팅할 때 실행 스크립트에 -verbose 옵션을 설정한 경우

  • 서버가 부팅 중인 경우

서버를 부팅할 때 -verbose 옵션을 설정한 경우는 Launcher 프로세스로 콘솔 로그가 출력된다. 또한 서버가 부팅 중인 경우에도 Launcher 프로세스를 통해서 로그 메시지가 콘솔 화면에 출력될 수 있다.

8.3.2. 동적으로 로거 설정

콘솔 툴이나 WebAdmin을 통해서 런타임(runtime)에 동적으로 로거나 핸들러를 추가, 삭제, 변경할 수 있다.

WebAdmin 사용

다음은 WebAdmin에서 로그 설정 화면에서 서버에 로그를 동적으로 추가하는 과정에 대한 설명이다.

참고

WebAdmin을 사용한 로거의 변경과 삭제 방법은 위에서 설명한 로거의 추가 방법과 비슷하므로 본 안내서에서는 자세한 설명을 생략한다.

  1. WebAdmin의 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 화면으로 이동한다. 해당 화면에서 서버(server1)를 선택하면 서버 설정화면으로 이동한다. 서버 설정화면에서 [Basic Info] > [System Logging] 메뉴를 선택한다.

    [그림 8.4] WebAdmin에서 동적으로 로거 설정 (1)

    WebAdmin에서 동적으로 로거 설정 (1)


  2. 서버에 로거를 추가하려면 설정 변경을 위한 Lock을 설정하는 작업이 선행되어야 한다. 설정을 변경하려면 왼쪽 메뉴의 하단에 위치한 [LOCK & EDIT] 버튼을 클릭해서 Lock을 설정한다. Lock을 설정하면 로거 목록 상단에 위치한 [ADD] 버튼이 활성화된다.

    [그림 8.5] WebAdmin에서 동적으로 로거 설정 (2)

    WebAdmin에서 동적으로 로거 설정 (2)


  3. [ADD] 버튼을 클릭하고 로거의 이름('Name')과 레벨('Level')을 설정하고 [확인] 버튼을 클릭한다.

    [그림 8.6] WebAdmin에서 동적으로 로거 설정 (3)

    WebAdmin에서 동적으로 로거 설정 (3)

  4. 화면 상단에 임시 저장한 결과 메시지와 로거 목록에서 추가한 로거 정보를 확인할 수 있다. 추가한 로거인 'jeus.config'를 클릭한다.

    [그림 8.7] WebAdmin에서 동적으로 로거 설정 (4)

    WebAdmin에서 동적으로 로거 설정 (4)


  5. 파일 핸들러를 추가하기 위해 화면 하단에 위치한 [FILE HANDLER] 버튼을 클릭한다.

    [그림 8.8] WebAdmin에서 동적으로 로거 설정 (5)

    WebAdmin에서 동적으로 로거 설정 (5)


  6. 추가할 파일 핸들러의 이름을 설정하고 로그 파일 로테이션 방식은 매일 갱신하도록 1일로 설정하고 [확인] 버튼을 클릭한다.

    [그림 8.9] WebAdmin에서 동적으로 로거 설정 (6)

    WebAdmin에서 동적으로 로거 설정 (6)


    필요한 경우 고급 선택사항을 설정한다.

  7. 다음은 로그 핸들러 추가에 대한 임시저장의 결과이다. 화면 상단에서 임시저장 결과에 대한 메시지를 확인할 수 있다. 또한 핸들러 테이블에 추가한 핸들러가 나타나는 것을 확인할 수 있다.

    [그림 8.10] WebAdmin에서 동적으로 로거 설정 (7)

    WebAdmin에서 동적으로 로거 설정 (7)


  8. [Activate Changes] 버튼을 클릭하여 변경한 설정을 서버에 반영한다.

  9. 화면 상단에는 로거와 로거의 핸들러를 추가하고 서버에 반영한 결과가 자세한 메시지로 출력된다. 로거 추가와 핸들러 추가는 운영 중인 서버에 동적으로 반영 가능하다.

콘솔 툴 사용

콘솔 툴에서 add-logger, modify-logger, remove-logger 명령을 사용해서 Logging 설정을 동적으로 변경할 수 있다. 각 명령에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.3. Server Management 관련 명령어”를 참고한다.

list-loggers 명령을 사용하여 현재 설정되어 있는 로거 정보를 확인할 수 있다.

[DAS]domain1.adminServer>list-loggers server1
List of Loggers
================================================================================
+-------------+-------+------------------+--------+----------------------------+
| Logger Name | Level |    Use Parent    | Filter |          Formatter         |
|             |       |     Handlers     |        |                            |
+-------------+-------+------------------+--------+----------------------------+
| jeus        | INFO  | false            |        | jeus.util.logging.SimpleFor|
|             |       |                  |        |matter                      |
+-------------+-------+------------------+--------+----------------------------+
================================================================================

[DAS]domain1.adminServer>add-logger -server server1 jeus.ejb -level FINEST
Successfully performed the ADD operation for The logger for the server(server1)..
Check the results using "list-loggers or add-logger"

[DAS]domain1.adminServer>add-logger -server server1 jeus.ejb.clustering -level FINEST
Successfully performed the ADD operation for The logger for the server(server1)..
Check the results using "list-loggers or add-logger"

[DAS]domain1.adminServer>list-loggers server1
List of Loggers
================================================================================
+----------------+--------+----------------+--------+--------------------------+
|   Logger Name  |  Level |   Use Parent   | Filter |         Formatter        |
|                |        |    Handlers    |        |                          |
+----------------+--------+----------------+--------+--------------------------+
| jeus           | INFO   | false          |        | jeus.util.logging.SimpleF|
|                |        |                |        |ormatter                  |
+----------------+--------+----------------+--------+--------------------------+
| jeus.ejb       | FINEST | true           |        | jeus.util.logging.SimpleF|
|                |        |                |        |ormatter                  |
+----------------+--------+----------------+--------+--------------------------+
| jeus.ejb.cluste| FINEST | true           |        | jeus.util.logging.SimpleF|
|ring            |        |                |        |ormatter                  |
+----------------+--------+----------------+--------+--------------------------+
================================================================================

[DAS]domain1.adminServer>modify-logger -server server1 jeus.ejb.clustering -level FINE
Successfully performed the MODIFY operation for The logger[jeus.ejb.clustering]
information for the server [server1].
Check the results using "modify-logger"

[DAS]domain1.adminServer>list-loggers server1
List of Loggers
================================================================================
+----------------+--------+----------------+--------+--------------------------+
|   Logger Name  |  Level |   Use Parent   | Filter |         Formatter        |
|                |        |    Handlers    |        |                          |
+----------------+--------+----------------+--------+--------------------------+
| jeus           | INFO   | false          |        | jeus.util.logging.SimpleF|
|                |        |                |        |ormatter                  |
+----------------+--------+----------------+--------+--------------------------+
| jeus.ejb       | FINEST | true           |        | jeus.util.logging.SimpleF|
|                |        |                |        |ormatter                  |
+----------------+--------+----------------+--------+--------------------------+
| jeus.ejb.cluste| FINE   | true           |        | jeus.util.logging.SimpleF|
|ring            |        |                |        |ormatter                  |
+----------------+--------+----------------+--------+--------------------------+
================================================================================

[DAS]domain1.adminServer>remove-logger -server server1 jeus.ejb
Successfully performed the REMOVE operation for The logger for the server(server1)..
Check the results using "list-loggers or remove-logger"

[DAS]domain1.adminServer>list-loggers server1
List of Loggers
================================================================================
+----------------+-------+----------------+--------+---------------------------+
|   Logger Name  | Level |   Use Parent   | Filter |         Formatter         |
|                |       |    Handlers    |        |                           |
+----------------+-------+----------------+--------+---------------------------+
| jeus           | INFO  | false          |        | jeus.util.logging.SimpleFo|
|                |       |                |        |rmatter                    |
+----------------+-------+----------------+--------+---------------------------+
| jeus.ejb.cluste| FINE  | true           |        | jeus.util.logging.SimpleFo|
|ring            |       |                |        |rmatter                    |
+----------------+-------+----------------+--------+---------------------------+
================================================================================

8.3.3. 표준 출력과 표준 에러를 로그 형식으로 출력 설정

JEUS에서는 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 기능을 제공한다. JEUS에서 기본으로 사용하는 포맷을 이용하여 JEUS 로거와 비슷한 형식으로 표준 출력과 표준 에러를 출력할 수 있다.

본 절에서는 WebAdmin이나 콘솔 툴을 통한 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 설정 방법에 대해 설명한다.

WebAdmin 사용

WebAdmin의 왼쪽 메뉴에서 [Servers]를 선택하여 서버 목록 화면으로 이동하고 해당 화면에서 서버(server1)를 선택하면 서버 설정화면으로 이동한다. 서버 설정화면에서 [Basic Info] 탭을 선택하면 하위 고급 선택사항에서 'Log Stdout To Raw Format' 항목을 설정할 수 있다.

[그림 8.11] WebAdmin에서 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 설정

WebAdmin에서 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 설정

참고

'Log Stdout To Raw Format' 항목의 기본값은 true로 표준 출력과 표준 에러를 그대로 출력한다. 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하려면 이 값을 false로 설정한다. WebAdmin에서는 이 항목을 체크 해제하면 된다.

콘솔 툴 사용

콘솔 툴에서 표준 출력과 표준 에러를 JEUS 로그 형식으로 출력하는 설정에 대한 예제이다.

[DAS]domain1.adminServer>modify-server server1
Show the current configuration.
server (server1)
================================================================================
+----------------------------------+-------------------------------------------+
| Node                             | node1                                     |
| JVM Configs                      | -Xmx256m -XX:MaxPermSize=128m             |
| Action On Resource Leak          | WARNING                                   |
| Stdout to Raw Format             | true                                      |
| MEJB                             | false                                     |
| Class FTP                        | false                                     |
| Server Log Home Directory         | none                                     |
+----------------------------------+-------------------------------------------+
================================================================================

[DAS]domain1.adminServer>modify-server server1 -logStdoutToRawFormat false
Successfully performed the MODIFY operation for server (server1).
Check the results using "list-servers server1 or modify-server server1"

[DAS]domain1.adminServer>list-servers server1
List of Servers
================================================================================
+-----+-------+-------+-----+-------+-------+-------+-----+------+-------+-----+
| Ser |  Base |  Base | Node|  JVM  |Action |Stdout | MEJB|Class |Server | Type|
| ver |Listen |Listen |     |Configs|  On   |to Raw |     | FTP  |  Log  |     |
|     | Addre |  Port |     |       |Resour | Format|     |      | Home  |     |
|     |  ss   |       |     |       |ce Leak|       |     |      |Direct |     |
|     |       |       |     |       |       |       |     |      |  ory  |     |
+-----+-------+-------+-----+-------+-------+-------+-----+------+-------+-----+
| ser |       | 9836  | nod | -Xmx2 | Warni | false | fal | false| none  | ser |
|ver1 |       |       |e1   |56m    |ng     |       |se   |      |       |ver  |
|     |       |       |     |-XX:Ma |       |       |     |      |       |     |
|     |       |       |     |xPermS |       |       |     |      |       |     |
|     |       |       |     |ize=12 |       |       |     |      |       |     |
|     |       |       |     |8m     |       |       |     |      |       |     |
+-----+-------+-------+-----+-------+-------+-------+-----+------+-------+-----+
================================================================================

이 기능을 사용하면 표준 출력은 다음과 같은 포맷으로 출력된다.

[시간] [레벨] [Logging되는 Thread 정보] [STDOUT/STDERR] 메시지
항목설명
[시간]"년.월.일 시간:분:초"의 형식으로 출력된다.
[레벨]로그 레벨이 매핑되는 숫자로 출력된다. 모두 SEVERE로 0으로 표시된다.
[Logging되는 Thread 정보]logging하는 프로세스(서버 또는 Launcher)와 Thread 번호로 표현되며, 이 둘은 하이픈(-)으로 구분된다. Thread 정보가 같은 로그는 같은 Thread에서 logging한 메시지이다.
[STDOUT/STDERR]

표준 출력인지 표준 에러인지를 표시한다.

  • STDOUT : logging하려는 메시지가 표준 출력인 경우이다.

  • STDERR : Exception과 같은 표준 에러인 경우이다.

  • UNKNOWN : 알 수 없는 경우이다.

메시지System.out이나 System.err를 통해 출력할 메시지이다.

8.3.4. 로거 설정

WebAdmin이나 콘솔 툴을 통해 로거나 핸들러를 추가, 삭제, 수정할 수 있고 이는 모두 동적 반영 가능하다. 즉, 운영 중인 서버를 재기동하지 않아도 변경한 설정 내용이 적용될 수 있다.

참고

로거에서 동적 반영 가능한 설정은 레벨(level)과 상위 핸들러를 사용할지 여부(use-parent-handlers)이다. 핸들러에서는 레벨(level) 만 동적반영 가능하다. 또한 콘솔 툴 명령으로는 파일 핸들러만 추가, 변경이 가능하다.

WebAdmin 사용

WebAdmin의 왼쪽 메뉴에서 [Servers]를 선택하고 조회된 서버 목록에서 원하는 서버를 클릭한다. [Basic] > [System Logging] 메뉴를 선택한다. 로거 설정을 위해 [ADD] 버튼을 클릭한다.

[그림 8.12] WebAdmin에서의 로거 설정화면

WebAdmin에서의 로거 설정화면

다음은 설정 항목에 대한 설명이다.

항목설명
Name로거의 이름을 설정한다.
Level로거의 레벨(level)을 설정한다. 이 레벨 이하의 메시지만 로거를 통해 출력된다. 이 레벨의 값으로는 Logging API의 레벨인 SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL이 올 수 있다. (기본값: INFO)
Use Parent Handlers

로거가 자신의 핸들러뿐만 아니라 상위 로거의 핸들러를 사용할 것인지의 여부를 설정한다.

기본값은 true이지만 jeus 로거의 경우는 JEUS의 최상위 로거이기 때문에 false로 설정한다. 또한 자신의 핸들러를 설정하지 않고 이 값을 false로 설정할 경우 상위 핸들러를 사용할 수 있도록 이 값을 true로 변경한다.

Filter Class로거가 로그 메시지를 핸들러에게 보내기 전에 수행하는 필터링(filtering)에 사용할 클래스를 지정한다. 여기에 지정된 클래스는 lib/application 디렉터리의 JAR 파일 내에 포함되어 있어야 한다.
Formatter Class

로거가 로그 메시지를 핸들러에 보내기 전에 로그 메시지를 포맷팅하는데 이때 사용하는 클래스를 지정한다. 여기에 지정된 클래스는 lib/application 디렉터리의 JAR 파일 내에 포함되어 있어야 한다.

로그 포맷터를 지정하려면 로거에 핸들러가 설정되어 있어야 하고 해당 핸들러를 통해서 출력되는 로그 메시지만 설정한 포맷터가 적용된다.

Handlers로거가 사용할 핸들러를 지정한다. 이 항목이 설정되어 있지 않다면 jeus 로거의 경우는 파일 핸들러(File Handler)가 기본적으로 사용되고, 그 외의 jeus 하위 로거들은 jeus 로거의 핸들러를 사용한다.

참고

JEUS 4.x 에서 사용하던 로그 레벨인 FATAL, NOTICE, INFORMATION, DEBUG 레벨은 JEUS 7부터는 사용할 수 없다.

Handler에는 파일 핸들러, SMTP 핸들러, 소켓 핸들러, 사용자 핸들러가 있으며 각 핸들러에 대해 다음과 같은 하위 항목들이 있다.

  • 파일 핸들러

    파일 핸들러는 파일로 로그 메시지를 출력하는 핸들러이다.

    항목설명
    Name핸들러를 나타내는 이름을 지정한다. 이름은 하나의 로거 내에서 유일해야 한다. 만약 지정하지 않으면 클래스 이름과 Hash Code를 조합한 이름이 사용된다.
    File Name

    핸들러가 로그 메시지를 출력할 파일의 이름을 지정한다. 절대 경로로 되어 있다면 그 경로로 파일이 생성되고 상대 경로라면 각 로거의 기본 경로를 기준으로 한 상대 경로로 인식한다.

    설정하지 않으면 각 로거별로 지정된 경로로 파일을 생성해서 로그 메시지를 출력한다.

    Level

    핸들러가 출력할 메시지의 레벨을 지정한다. 로그 메시지를 출력할 때 로거를 통과한 로그 메시지가 해당 로거가 사용하는 각각의 핸들러에게 전달되는데, 이 핸들러의 레벨에 부합하는 로그 메시지만 해당 핸들러에 의해 출력된다.

    기본값으로 설정하면 로거를 통과하는 모든 로그 메시지가 핸들러에 의해 출력된다. (기본값: FINEST)

    Enable Rotation핸들러가 로그 파일 로테이션 기능을 사용할 것인지 설정한다. 기본값으로 설정하면 로테이션 기능을 사용한다. (기본값: true)
    Rotation Count로테이션의 횟수를 설정한다. 핸들러가 로그 파일 로테이션 기능을 사용할 때만 의미가 있다. (기본값: 10)
    Valid Day

    핸들러가 출력할 파일을 날짜별로 생성할 경우에 사용한다.

    파일 이름의 형식은 파일 끝에 "_YYYYMMDD"가 붙는다.

    Valid Hour

    핸들러가 출력할 파일을 시간별로 생성할 경우에 사용한다.

    24의 약수(예: 3, 6)이거나 24로 나눈 나머지가 약수(예: 27, 30)인 값을 지정한다. 파일 이름의 형식은 끝에 "_YYYYMMDD_HH"가 붙는다.

    Valid Size핸들러가 출력할 파일을 크기별로 생성할 경우에 설정하는 항목으로 핸들러가 로그 파일 로테이션 기능을 사용할 때만 의미가 있다.
    Encoding핸들러가 출력하는 문자열의 인코딩을 지정한다. 기본은 시스템 인코딩으로 설정되어 있다.
    Filter Class

    핸들러가 로그 메시지를 필터링해서 출력하고자 할 때 이용되는 클래스이다.

    로거의 Filter Class와 마찬가지로 lib/application에 해당 클래스를 포함한 JAR 파일이 존재해야 한다.

    Append

    서버를 기동한 뒤 로그를 파일로 출력하려고 할 때 이미 같은 이름의 파일이 존재하면 덮어쓸지, 파일 끝에 추가할지를 결정한다.

    • true : 파일 끝에 계속 추가한다. (기본값)

    • false : 로테이션을 사용 여부에 따라서 의미가 달라진다. 로테이션을 사용하고 있다면 서버를 기동할 때마다 이전 로그 파일은 백업되고 새로운 로그 파일이 생성된다. 그러나 로테이션을 사용하고 있지 않다면 서버를 기동할 때마다 이전 로그 파일이 삭제되므로 주의해서 사용해야 한다.

    Rotation Dir핸들러가 로그 파일 로테이션 기능을 사용할 때만 의미가 있다.
    Buffer Size

    파일로 출력할 때 사용할 버퍼(buffer)의 크기를 지정한다. 버퍼가 클수록 Logging의 성능은 좋아지지만 예상치 못한 상황으로 인해 JEUS가 비정상 종료될 때에는 그 버퍼 크기만큼 로그가 손실될 수도 있다. (기본값: 1024, 단위: KB)

    버퍼에 로그 메시지를 축적했다가 버퍼의 크기가 설정한 크기보다 커지면 로그 메시지를 파일에 출력한다.

  • SMTP 핸들러

    SMTP 핸들러는 로그 메시지를 이메일로 전송하는 핸들러이다. 하나의 로그 메시지가 하나의 이메일로 전송된다.

    항목설명
    Name핸들러가 툴에서 보여질 때 사용할 이름을 지정한다. 이름은 하나의 로거 내에서 유일해야 한다. 만약 지정하지 않으면 클래스 이름과 Hash Code 이름이 대체된다.
    Level핸들러가 출력할 메시지의 레벨을 지정한다. 즉, 로거를 통과한 로그 메시지가 해당 로거가 사용하는 각각의 핸들러에게 전달되는데, 이 핸들러의 레벨에 부합하는 로그 메시지만 해당 핸들러에 의해 출력된다. 기본값으로 설정하면 로거를 통과하는 모든 로그 메시지가 핸들러에 의해 출력된다. (기본값: FINEST)
    Smtp Host Address이메일을 보낼 호스트(host)의 주소를 지정한다.
    From Address이메일을 보내는 사람의 주소를 지정한다.
    Sender ID이메일을 보내는 사람의 ID를 명시한다.
    Sender Password이메일을 보내는 사람의 패스워드를 지정한다. 암호화해서 저장할 때에는 "{암호화할 알고리즘}암호화된 패스워드"와 같은 형식으로 입력한다.
    To Address이메일을 받는 사람의 주소를 지정한다.
    Property사용하는 메일 서버마다 요구하는 특정한 SMTP 프로퍼티가 있을 수 있다. schema(WebAdmin)에 명시된 기본적인 SMTP 프로퍼티 외에 추가로 필요한 프로퍼티가 있다면 "key,value" 형태로 입력 가능하다. schema에 명시된 기본적인 SMTP 프로퍼티와 겹치는 항목이 있다면 schema(WebAdmin)의 값을 따른다.
    Send For All Messages모든 메시지를 SMTP 핸들러로 보낼지를 결정한다. false이면 JEUS 시스템에서 이메일로 전송하기로 결정되어 있는 메시지만 이 핸들러를 사용해서 보내진다. 현재 이 설정은 사용자 로거에만 유효하다. (기본값: false)
    Encoding핸들러가 출력하는 문자열의 인코딩을 지정한다. 기본은 시스템 인코딩으로 설정되어 있다.
    Filter Class핸들러가 로그 메시지를 출력하기 전에 수행할 필터링에 이용되는 클래스이다. 로거의 <filter-class>와 마찬가지로 lib/application에 이 클래스를 포함한 JAR 파일이 존재해야 한다.
    Cc Address이메일을 참조로 받는 사람의 주소를 지정한다.
    Bcc Address이메일을 숨은 참조로 받는 사람의 주소를 지정한다.
  • 소켓 핸들러

    소켓 핸들러는 로그 메시지를 소켓으로 전송하는 핸들러이다.

    항목설명
    Name핸들러가 툴에서 보여질 때 사용할 이름을 지정한다. 이름은 하나의 로거 내에서 유일해야 한다. 지정하지 않으면 클래스 이름과 Hash Code 이름이 대체된다.
    Level핸들러가 출력할 메시지의 레벨을 지정한다. 즉, 로거를 통과한 로그 메시지가 해당 로거가 사용하는 각각의 핸들러에게 전달되는데, 이 핸들러의 레벨에 부합하는 로그 메시지만 해당 핸들러에 의해 출력된다. 기본값으로 설정하면 로거를 통과하는 모든 로그 메시지가 핸들러에 의해 출력된다. (기본값: FINEST)
    Address핸들러가 접속할 머신(machine)의 IP 주소를 지정한다.
    Port핸들러 접속할 머신의 포트 번호를 지정한다.
    Encoding핸들러가 출력하는 문자열의 인코딩을 지정한다. 기본은 시스템 인코딩으로 설정되어 있다.
    Filter Class핸들러가 로그 메시지를 출력하기 전에 수행할 필터링에 이용되는 클래스이다. 로거의 <filter-class>와 마찬가지로 lib/application에 이 클래스를 포함한 JAR 파일이 존재해야 한다.
  • 사용자 핸들러

    사용자 핸들러는 사용자가 생성한 핸들러 클래스를 지정하는 항목이다.

    항목설명
    Name핸들러가 툴에서 보여질 때 사용할 이름을 지정한다. 이름은 하나의 로거 내에서 유일해야 한다. 지정하지 않으면 클래스 이름과 Hash Code 이름이 대체된다.
    Level

    핸들러가 출력할 메시지의 레벨을 지정한다. 즉, 로거를 통과한 로그 메시지가 해당 로거가 사용하는 각각의 핸들러에게 전달되는데, 이 핸들러의 레벨에 부합하는 로그 메시지만 해당 핸들러에 의해 출력된다. 기본값으로 설정하면 로거를 통과하는 모든 로그 메시지가 핸들러에 의해 출력되도록 되어 있다.

    (기본값: FINEST)

    Handler Class사용자가 생성한 핸들러의 클래스를 지정한다. 해당 클래스는 lib/application 디렉터리의 JAR 파일에 포함되어 있어야 한다. 또한 해당 클래스는 Logging API의 java.util.logging.Handler를 상속받고 jeus.util.logging.JeusHandler를 구현해야 한다.
    Handler Propertyjeus.util.logging.JeusHandler의 setProperty()에 사용되는 Map 객체에 들어갈 프로퍼티를 지정한다.
    Formatter Class핸들러가 사용할 Formatter 클래스를 지정한다. 이 클래스도 lib/application 디렉터리의 JAR 파일에 포함되어 있어야 한다. 또한 jeus.util.logging.JeusFormatter 인터페이스를 구현해야 한다. (기본값: jeus.util.logging.SimpleFormatter)
    Formatter Propertyjeus.util.logging.JeusFormatter의 setProperty()에 사용되는 Map 객체에 들어갈 프로퍼티를 지정한다.
    Encoding핸들러가 출력하는 문자열의 인코딩을 지정한다. 기본은 시스템 인코딩으로 설정되어 있다.
    Filter Class핸들러가 로그 메시지를 출력하기 전에 수행할 필터링에 이용되는 클래스이다. 로거의 <filter-class>와 마찬가지로 lib/application에 이 클래스를 포함한 JAR 파일이 존재해야 한다.

8.3.5. 로그 파일 로테이션(Log File Rotation) 설정

JEUS가 시작될 때 또는 JEUS 운영 중에 설정한 시간이 되거나 파일 사이즈를 넘으면 자동으로 이전에 logging하던 파일의 이름은 변경하고 새로 출력할 로그들은 원래의 로그 파일에 계속 logging할 수 있도록 로그 파일 로테이션 기능을 제공한다.

다음은 WebAdmin을 통해 File Handler의 로그 파일 로테이션을 설정하는 방법에 대한 설명이다.

[그림 8.13] WebAdmin에서의 로그 파일 로테이션 설정

WebAdmin에서의 로그 파일 로테이션 설정

'Valid Day', 'Valid Hour', 'Valid Size'의 3개 항목의 설정에 따라 로테이션한다. 로테이션의 조건이 되는 3개의 항목 중 아무 것도 설정되어 있지 않으면 매일 00시 00분이 되면 logging하던 파일의 이름을 변경해서 백업하고 이 후에 logging되는 파일은 이전에 logging하던 파일에 새로 logging한다.

8.3.6. 프로퍼티 설정

필요한 프로퍼티 설정은 다음과 같다.

  • 시스템 프로퍼티 설정

    Standalone 클라이언트에서 로거 설정을 할 경우 로그 레벨을 시스템 프로퍼티로 설정할 수 있다.

  • Logging 프로퍼티 파일

    Java Logging 프로퍼티(logging.properties) 파일에 Logging 설정을 할 수 있다.

    (기본 경로: JEUS_HOME/bin/logging.properties)

    -Djava.util.logging.config.file = <프로퍼티 파일 경로>

참고

JEUS 6까지 사용 가능했던 jeuslogging.properties 파일은 JEUS 7부터는 사용할 수 없다.

레벨 설정 우선순위

JEUS 툴을 이용한 동적 설정을 제외한 나머지 설정들의 레벨 설정 우선순위는 다음과 같다.

  1. 시스템 프로퍼티

  2. Java Logging 프로퍼티(logging.properties) 파일

  3. domani.xml의 Logging 설정

참고

핸들러에 설정한 로그 레벨은 위에서 언급한 설정 우선순위를 치환(Override)하는 것은 아니다. 하지만 최종적으로 핸들러를 통해서 로그가 출력되기 때문에 가장 높은 순위에 있다고 할 수 있다. 참고로 핸들러의 기본 로그 레벨은 FINEST이다.