1. JBoss Logging 이해 |
로깅은 애플리케이션의 활동을 일련의 메시지로 기록하는 것입니다.
로그 메시지는 애플리케이션을 개발하면서 디버깅하는 개발자나 운영 환경에서 시스템을 관리하는 관리자에게 매우 중요한 정보를 제공합니다.
최근의 Java 로깅 프레임워크들은 대부분 정확한 시간과 메시지의 출처 등 다른 정보도 함께 제공하고 있습니다.
JBoss EAP 6는 EAP 자체의 정보를 출력하거나 배포된 애플리케이션에서 사용하기 위해 다양한 설정이 가능한 로깅 시스템을 제공합니다. JBoss EAP 6의 로깅 시스템은 JBoss LogManager를 기반으로 하고, log4j, Java Utils 로깅(java.util.logging) 및 JBoss Logging을 포함한 다양한 로깅 프레임워크를 지원합니다.
또, JBoss EAP 6에 배포되는 애플리케이션에서 로깅 기능을 사용할 수 있도록 강력하고 편리한 로깅 프레임워크인 JBoss Logging을 제공합니다.
JBoss LogManager는 다음과 같은 로깅 프레임워크를 지원합니다.
JBoss Logging : JBoss EAP 6에 포함되어 있습니다.
- Apache Commons Logging : http://commons.apache.org/logging
- Simple Logging Facade for java (SLF4J) : http://www.slf4j.org
- Apache log4j : http://logging.apache.org/log4j/1.2
- Java SE Logging (java.util.logging) : http://download.oracle.com/ javase/6/docs/api/java/util/logging/package-summary.html
(1) 부트 로거 설정
부트 로그는 JBoss EAP 6 서버 부팅 중 발생한 이벤트를 기록합니다. JBoss에서 제공하는 로깅 서브시스템도 extension으로 제공되는 모듈이기 때문에 로깅 서브시스템이 활성화되기 전까지 발생하는 이벤트를 기록할 로거가 필요합니다. 부트 로거가 그 역할을 합니다.
로그 출력 레벨 및 로그 로테이션 등이 이미 설정되어 있어 기본값에서 변경하지 않아도 됩니다.
구분 | 기본값 | 비고 |
로그 파일 저장 위치 | $jboss.server.base.dir/log | |
로그 파일 이름 | boot.log | 콘솔 및 파일에 출력 |
부트 로그는 logging.properties 파일을 편집하여 설정할 수 있습니다. 이 파일은 Java의 표준 프로퍼티 파일이며 텍스트 편집기로 편집하면 됩니다.
구분 | 로깅 프로퍼티 파일 경로 |
도메인 모드 | $JBOSS_HOME/domain/configuration/logging.properties |
스탠드얼론 모드 | $JBOSS_HOME/standalone/configuration/logging.properties |
다음은 JBoss의 설정 파일 정보를 DEBUG 레벨로 출력하도록 logging.properties 설정 파일을 변경한 예제입니다.
# Additional loggers to configure (the root logger is always configured)
loggers=org.jboss.as.config
# Root logger level
logger.level=${jboss.boot.server.log.level:INFO}
# root logger handlers
logger.handlers=BOOT_FILE,CONSOLE
logger.org.jboss.as.config.level=DEBUG
logger.org.jboss.as.config.useParentHandlers=true
# Console handler configuration
handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
handler.CONSOLE.properties=autoFlush
handler.CONSOLE.level=${jboss.boot.server.log.console.level:INFO}
handler.CONSOLE.formatter=PATTERN
# File handler configuation
handler.BOOT_FiLE=org.jboss.logmanager.handlers.PeriodicRotatingFileHandler
handler.BOOT_FILE.level=DEBUG
handler.BOOT_FILE.properties=autoFlush,fileName
handler.BOOT_FILE.autoFlush=true
handler.BOOT_FILE.filename=${org.jboss.boot.log.file:boot.log}
handler.BOOT_FIL.formatter=PATTERN
# Formatter pattern configuration
formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter
formatter.PATTERN.properties=pattern
formatter.PATTERN.pattern=%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n
(2) 기본 로그 파일 위치
로그 파일이 만들어지는 위치는 다음과 같습니다.
기본적으로 1일 주기로 로그 파일이 변경되도록 설정되어 있습니다.
로그 파일 | 설명 |
$JBOSS_HOME/standalone/log/boot.log | 서버 부팅 로그 파일 |
$JBOSS_HOME/standalone/log.server.log | 서버가 시작된 이후 모든 로그 메시지가 기록되는 파일 |
(3) 서버 로그 설정
서버 로그에는 서버가 부팅된 이후 JBoss EAP 6의 서비스와 서버 자체에 대한 로그가 출력됩니다.
아래는 standalone.xml의 로깅 로브시스템 설정 부분입니다. 콘솔 핸들러와 server.log 파일이 주기적으로 로테이팅하는 파일 핸들러(periodic-rotating-file-handler)를 사용하도록 설정되어 있습니다. 몇 가지 logger 카테고리와 root-logger가 설정되어 있습니다.
여기서 주기적으로 로그를 로테이팅하는 설정은 <suffix value=".yyyy-MM-dd"/>의 파일 이름으로 지정되어 있습니다. 파일의 이름이 .2020-12-22와 같은 형식으로 생성되며, 이 값은 일 단위로 로그를 로테이팅하도록 설정한 것입니다.
<subsystem xmlns="urn:jboss:domain:logging:1.2">
<console-handler name="CONSOLE">
<level name="INFO"/>
<formatter>
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E&n"/>
</formatter>
</console-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="come.arjuna'>
<level name="WARN">
</logger>
<logger category="org.apache.tomcat.util.modeler">
<level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
<level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
<level name="WARN"/>
</logger>
<logger category="jacorb">
<level name="WARN"/>
</logger>
<logger category="jacorb.config">
<level name="ERROR"/>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
</subsystem>
<로그 파일 저장 디렉터리 변경>
기본적으로 server.log의 로그 디렉터리는 시스템 프로퍼티 "jboss.server.log.dir"에 의해 결정됩니다.
<file relative-to="jboss.server.log.dir" path="server.log"/>
서버 구성 시 로그 파일의 저장 디렉터리를 변경하려면, '-Djboss.server.log.dir'에 로그를 남길 디렉터리를 지정하면 됩니다.
standalone.sh에 아래와 같이 로그 디렉터리를 변경하는 옵션을 추가합니다.
export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.log.dir=/logs/jboss-eap/server1"
(4) 로그 레벨
로그 레벨은 로그 메시지의 특성이나 심각도를 나타내는 것입니다. 특정 로그 메시지의 레벨은 그 메시지를 전송하기 위해 선택한 로깅 프레임워크의 API를 사용하여 개발자가 코딩할 때 지정합니다.
JBoss EAP 6는 6개의 로그 레벨을 사용합니다. 낮은 것부터 높은 것 순서로 TRACE, DEBUG, INFO, WARN, ERROR, FATAL의 6단계입니다.
로그 카테고리와 로그 핸들러는 수신된 메시지 중에서 지정된 레벨 이상의 메시지만 처리합니다. 예를 들어, WARN 레벨의 로그 핸들러는 WARN, ERROR, FATAL 메시지만 출력합니다.
JBoss EAP 6는 JDK 로그 출력 레벨과 log4j 형식의 레벨을 모두 지원합니다. JBoss EAP 6에서 사용할 수 있는 로그 레벨은 다음과 같습니다.
로그 레벨 | 개요 | 설명 |
FATAL | 치명적인 에러 | 서비스 장애나 애플리케이션의 종료를 초래하거나 JBoss EAP 6 종료를 일르킬 수 있는 이벤트 |
ERROR | 에러 | 서비스를 계속할 수 있지만, 오류가 발생하는 경우에 사용하는 이벤트 |
WARN | 조치할 수 있는 문제에 대한 경고 | 오류는 아니지만 앞으로 오류를 유발할 수 있는 경고 이벤트 |
INFO | 라이프 사이클을 나타내는 정보 | 전반적인 진행 상황을 알리는 메시지 애플리케이션 시작, 종료 등의 주요 수명주기 이벤트 |
DEBUG | 애플리케이션 디버그 시 사용하는 정보 | DEBUG 로그 메시지는 일반적으로 애플리케이션을 디버깅할 때만 사용 |
TRACE | 애플리케이션 디버그 시 사용하는 상세 디버그 정보 | 애플리케이션의 실행 상태에 대한 자세한 정보를 제공하는 메시지 일반적으로 애플리케이션을 디버깅할 때만 사용 |
(5) 로거
Java 개발자는 애플리케이션의 상태를 알려주는 로그를 남기기 위해 소스 코드에 로거를 사용하여 코딩합니다. 로거는 로그의 레벨과 Java 클래스나 패키지명을 사용한 카테고리를 사용할 수 있습니다. 로그의 카테고리는 Java 패키지명과 클래스 이름으로 만들어져 트리 구조를 가지게 됩니다.
트리 형태로 구성되어 있기 때문에 상위 패키지명에 로그 레벨을 지정하면 그 하위에 있는 패키지나 클래스에 함께 적용됩니다.
다음은 JBoss EAP에 기본적으로 설정된 로거 설정입니다.
구분 | 설명 | 기본값 |
com.arjuna | Arjuna 트랜잭션 | WARN |
org.apache.tomcat.util.modeler | Timcat의 JMX MBean에 대한 패키지 | WARN |
org.jboss.as.config | org.jboss.as.config로 시작하는 패키지 | DEBUG |
sun.rmi | sun.rmi로 시작되는 패키지 | WARN |
jacorb | JacORB(CORBA API) | WARN |
jacorb.config | jacorb.config로 시작되는 패키지 | ERROR |
<로거의 로그 레벨 변경 방법>
JBoss EAP 6에서 트랜잭션을 담당하는 'com.arjuna' 패키지에 대한 로그 레벨일 'WARN' 레벨 이상의 로그를 출력하도록 설정되어 있습니다. 이 로그 레벨을 'DEBUG' 레벨로 변경하는 방법은 다음과 같습니다.
[standalone@localhost:9999 / ] cd /subsystem=logging/logger=com.arjuna
[standalone@localhost:9999 logger=com.arjuna] :change-log-level(level=DEBUG)
{ "outcome" => "success" }
[standalone@localhost:9999 logger=com.arjuna] :read-resource
{
"outcome" => "success",
"result" => {
"category" => "com.arjuna",
"filter" => undefined,
"filter-space" => "undefined,
"handlers" => unfefined,
"level" => "DEBUG",
"use-parent-handlers" => true"
}
}
새로운 로거를 추가하려면 다음과 같은 CLI 명령을 사용하면 됩니다.
[standalone@localhost:9999 / ] /subsystem=logging/logger=StatusManager:add(category=com.arjuna.ats.arjuna.StateManager, level=DEBUG)
{ "outcome" -> "success" }
(6) 루트 로거
로거 트리 구조상에서 최상단 로거를 루트 로거(root logger)라고 합니다. 트리의 최상단 노드는 로거의 카테고리 이름을 붙일 수 없어서 특별히 루트 로거라는 이름을 붙인것입니다. 루트 로거는 특별히 어떤 하위 로거에서 수신되지 않는 모든 로그 메시지를 수신합니다. 로거 계층 구조의 최상단에 있기 때문에 루트 로거에 대한 설정은 그 하위의 다른 모든 로거에 영향을 미치고, 하위의 설정된 로거들은 루트 로거의 설정을 오버라이드 합니다.
루트 로거를 설정하는 CLI 명령들은 다음과 같은 것들이 있습니다.
- chagne-root-log-level : 로트 로거의 로그 레벨 변경
- set-root-logger : 새로운 루트 로거를 설정
- remove-root-logger : 루트 로거를 삭제
- root-logger-assign-handler : 루트 로거의 핸들러를 정의
- root-logger-unassign-handler : 루트 로거의 핸들러를 삭제
<root-logger의 로그 출력 레벨 변경>
root-logger의 로그 레벨을 INFO에서 DEBUG로 변경하는 방법은 다음과 같습니다.
[standalone@localhost:9999 /] cd /subsystem=logging/periodic-rotating-file-handler=FILE
[standalone@localhost:9999 periodic-rotating-file-handler=FILE] :change-log-level(level=DEBUG)
{ "outcome" => "success" }
[standalone@localhost:9999 periodic-rotating-file-handler=FILE] :read-resource
{
"outcome" => "success",
"result" => {
"append" => true,
"autoflush" => true,
"enabled" => true,
"encoding" => undefined,
"file" => {
"relative-to" => "jboss.server.log.dir",
"path" => "server.log"
},
"filter" => undefined,
"filter-spec" => undefined,
"formatter" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n",
"level" => "DEBUG",
"name" => "FILE",
"suffix" => ".yyyy-MM-dd"
}
}
(7) 로그 핸들러
로그 핸들러는 JBoss EAP에서 수신한 로그 메시지를 기록하는 방법을 정의합니다. JBoss EAP 6에서 사용할 수 있는 핸들러는 다음 표와 같이 6가지 종류가 있습니다.
핸들러 | 설명 | 주요 파라미터 |
Console (console-handler) |
콘솔 로그 핸들러는 로그 메시지를 운영체제의 표준 출력(stdout) 또는 표준 오류(stderr)에 출력합니다. | name : 핸들러명을 지정 econdig : 인코딩을 지정 level : 로그 레벨 지정 filter : 필터 지정 formatter : 로그 출력 포맷을 지정 |
File (file-handler) |
파일 로그 핸들러는 로그 메시지를 지정된 파일에 저장하는 로그 처리기입니다. | append : 기존의 로그 파일에 추가할지 설정(기본값 true) file : 대상 로그 파일과 경로를 지정 |
Periodic (periodic-rotating-file-handler) |
주기적 로그 핸들러는 지정된 시간마다 파일을 새로 만들어 저장하는 로그 처리기입니다. 지정된 시간이 되면 기존 파일을 탕미스탬프가 추가된 파일로 보관해 놓고 새로 생성된 로그 파일에 저장합니다. | suffix : 로테이션하는 로그 파일의 확장자를 지정합니다. 확장자의 시간 포맷이 로테이션 간격이 됩니다. |
Size (size-rotating-file-handler) |
사이즈 로그 핸들러는 파일이 지정된 크기가 될 때마다 새로운 파일을 만들어 저장하는 로그 처리기입니다. 파일이 지정된 크기가 되면 파일명에 숫자를 붙여 보관하며, 보관하는 파일의 개수를 지정할 수 있습니다. |
rotate-size : 로테이션하는 파일 사이즈를 지정 max-backup-index : 로테이션으로 만들어지는 로그 파일의 최대 백업 수 |
Async (async-handler) |
비동기 로그 핸들러는 여러 개의 로그 핸들러를 비동기 방식으로 처리할 수 있게 하는 로그 처리기입니다. 로그 저장을 비동기 방식으로 처리하기 때문에 성능이 향상될 수 있습니다. |
queue-length : 로그 이벤트를 담아둘 큐의 크기를 지정 overflow-action : 큐가 오버플로우 됐을 때 동작을 지정합니다. 'block'과 'discard'를 설정할 수 있습니다. subhandlers : Async로 사용할 하위 핸들러를 지정 |
Custom (custom-handler) |
커스텀 로그 핸들러는 새로운 로그 핸들러를 설정할 수 있습니다. 커스텀 핸들러를 구현하려면 java.util.logging.Handler를 확장하여 모듈로 등록하여 사용합니다. |
<로그 기본 핸들러>
스탠드얼론 모드나 도메인 모드에는 콘솔 핸들러(console-handler)와 주기적 로테이팅 파일 핸들러(periodic-rotating-file-handler)가 다음과 같이 정의되어 있습니다.
<subsystem xmlns="urn:jboss:domain:logging:1.2">
<console-handler name="CONSOLE">
<level name="INFO"/>
<formatter>
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
</console-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<pattern-formatter pattern=%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyy-MM-dd"/>
<append value="true>/>
</periodic-rotating=file-handler>
</logger category="com.arjuna">
<level name="WARN"/>
</logger>
... 생략 ...
</subsystem>
<주기적 로테이팅 파일 핸들러>
periodic-rotating-file-handler의 로테이션 간격은 suffix 파라미터의 값을 변경하여 지정합니다. suffix에서 설정하는 문자는 'java.text.SimpleDateFormat'에서 사용하는 형식입니다. 로테이션 간격을 지정하는 Suffix 설정 값은 아래 표와 같습니다.
지정 패턴 | 입력 값 |
월 단위 | .yyyy-MM |
주 단위 | .yyyy-ww |
일 단위 | .yyyy-MM-dd |
AM/PM | .yyyy-MM-dd-a |
시간 단위 | .yyyy-MM-dd-HH |
다음 예제는 suffix를 '.yyyy-ww'로 변경하여 주단위로 로테이팅하도록 변경하는 것입니다.
[standalone@localhost:9999 /] cd /subsystem=logging/periodic-rotating-file-handler=FILE
[standalone@localhost:9999 periodic-rotating-file-handler=FILE] :read-attribute(name=suffix_
{
"outcome" => "success",
"result" => ".yyyy-MM-dd"
}
[standalone@localhost:9999 periodic-rotating-file-handler=FILE] :write-attribute(name=suffix,value=".yyyy-ww")
{ "outcome" => "success" }
<사이즈 로테이팅 파일 핸들러>
다음의 예제에서는 주기적 로테이팅 로그 핸들러로 설정되어 있는 설정을 삭제하고, size-rotating-file-handler를 추가합니다.
[standalone@localhost:9999 /] cd /subsystem=logging/periodic-rotating-file-handler=FILE
[standalone@localhost:9999 periodic-rotating-file-handler=FILE] :remove
{ "outcome" => "success" }
[standalone@localhost:9999 periodic-rotating-file-handler=FILE] :add(file={"path"=>"server.log","relative-to"=>"jboss.server.log.dir"},rotate-size="100m",max-backup-index=10)
{ "outcome" => "success" }
예제에서 로그 파일을 로테이팅하는 크기와 백업 파일의 개수를 지정하였습니다. 로테이팅할 파일 사이즈를 rotate-size 파라미터로 설정하였 고, 백업 파일 개수를 max-backup-index 파라미터로 지정하였습니다. 예제에서 100m로 'm'을 사용하여 '메가바이트' 단위로 지정하였고, 'k', 'g'를 사용하여 킬로바이트나 기가바이트 단위로 지정할 수 있습니다.
<핸들러의 append 설정>
JBoss에 기본적으로 설정된 핸들러는 서버 시작 시에 기존의 로그 파일에 덧붙여 쓰도록 설정되어 있습니다.
기존의 로그 파일에 덧붙여 쓰는 것이 아니라, 신규에 로그 파일을 작성하려면 FILE 핸들러의 append 값을 'false'로 설정하면 됩니다. 이렇게 설정하면 기존의 로그 파일은 삭제되고 새로운 파일이 만들어집니다. 설정 방법은 아래와 같습니다.
[standalone@localhost:9999 /] cd /subsystem=logging/periodic-rotating-file-handler=FILE
[standalone@localhost:9999 periodic-rotating-file0handler=FILE] :write-attribute(name=append,value="false")
{
"outcome" => "success",
"response-headers" => {
"operation-requires-reload" => true,
"process-state" => "reload-required"
}
}
※ 일반적으로 운영 환경에서 장애 발생 시 재시작으로 인하여 기존의 로그가 삭제되지 않게 하려면 append는 'true'로 설정해야 합니다.
(8) 콘솔 로그
서버 인스턴스를 시작하려면 standalone.sh 스크립트를 실행합니다. 도메인 모드에서는 domain.sh를 싲가하면 프로세스 컨트롤러, 호스트 컨트롤러와 서버 인스턴스(노드)가 시작됩니다. 이때 표준 출력에 콘솔 로그가 출력됩니다. 콘솔 로그에는 서버 장애 상황에서 서버의 스레드 덤프 등 장애 분석에 유용한 로그가 출력되기 때문에 파일에 리다이렉트하여 관리하는 것이 좋습니다.
또, 운영 환경에서 서버 인스턴스는 백그라운드로 실행해야 해서 다음과 같은 방법으로 서버를 시작합니다.
$ nohup ./standalone.sh >> nohup.out 2>&1 %
도메인 모드를 시작할 때도 마찬가지입니다.
$ nohup ./domain.sh >> nohup.out 2>&1 %
2. 애플리케이션 로그 출력 |
JBoss EAP 6의 로그를 관리하고 있는 JBoss LogMAnager에서는 내부적으로 JBoss Logging이라는 로그 출력 프레임워크를 사용하고 있습니다. 애플리케이션에서 이 로깅 프레임워크를 사용하여 애플리케이션 로그를 출력할 수 있습니다. 이렇게 사용하려면 개발 시 JBoss Logging 프레임워크를 사용하여 개발해야 합니다.
(1) JBoss Logging를 사용한 로그 출력
JBoss의 Logging은 $JBOSS_HOME/module 아래에 있는 jboss-logging-3.1.2.GA-redhat-1.jar를 사용합니다. 이 라이브러리는 JBoss의 모듈이기 때문에 애플리케이션에 넣을 필요없이 컴파일에만 이용합니다.
메이븐 pom.xml 파일에서 다음과 같이 <scope>를 provided로 설정하면 패키징하지 않고 컴파일 시에만 사용합니다.
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.2.GA-redhat-1</version>
<scope>provided</scope>
</dependency>
코드에서 로그를 출력할 때는 org.jboss.logging.Logger 클래스를 사용합니다.
package com.logtest;
import org.jboss.logging.Logger;
public class LoggerTest {
private static final Logger logger = Logger.getLogger(loggerTest.class.getName());
public void testLog() {
logger.info("info message");
logger.debug("debug message");
}
}
(2) 애플리케이션 로그 설정
애플리케이션에서 JBoss Logging를 사용해 로그를 출력하는 경우, 기본적으로 server.log에 출력되어 서버 로그와 애플리케이션 로그가 함께 출력됩니다. 서버 로그와 애플리케이션 로그를 분리하려면 JBoss의 로그 설정을 변경해야합니다.
로그 파일을 나누는 경우, 로그 로테이션이나 로그 삭제에 대해서도 서버 로그와 구별이 되기 때문에 애플리케이션을 위한 별도의 핸들러와 로거를 설정해야 합니다. 애플리케이션에서 설정은 필요 없고, JBoss EAP 6의 로그 설정만 하면 됩니다.
애플리케이션용 로그 파일을 나누기 위한 설정 방법은 아래와 같습니다.
<애플리케이션용 파일 핸들러(periodic-rotating-file-handler) 추가>
[standalone@localhost:9999 /] /subsystem=logging/periodic-rotating-file-handler=tpcw/:add(suffix=.yyyy-MM-dd, autoflush=true, append=true, file={"relative-to" => "jboss.server.log.dir", "path" = "AP.log})
{ outcome" => "success" }
[standalone@localhost:9999 /] cd /subsystem=logging/periodic-rotating-file-handler=AP
[standalone@localhost:9999 periodic-rotating-file-handler=AP] :write-attribute(name=edcoding, value=UTF-8)
{ "outcome" => "success" }
[standalone@localhost:9999 periodic-rotating-file-handler=AP] :write-attribute(name=formatter, value="%d %-5p [%c{1}](%t) - %m%n)
{ "outcome" => "success" }
<애플리케이션용 카테고리 등록>
[standalone@locahost:9999 /] /subsystem=logging/logger=com.AP/:add(level=INFO, handlers=["AP"], use-parent-handlers=false)
{ "outcome" => "success" }
<설정된 로깅 서브시스템 설정 파일>
<subsystem xmlns="urn:jboss:domain:logging:1.1">
... 생략 ...
<periodic-rotating-file-handler name="AP" autoflush="true">
<encoding value="UTF-8"/>
<formatter>
<pattern-formatter pattern="%d %-5p [%c{1}](%t) - %m%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="AP.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
... 생략 ...
<logger category="com.AP" use-parent-handlers="false">
<level name="INFO"/>
<handlers>
<handler name="AP"/>
/handlers>
</logger>
... 생략 ...
</subsystem>
(3) 애플리케이션에서 Log4j를 사용하는 경우
대부분의 애플리케이션은 Log4j와 같은 별도의 로깅 프레임워크를 사용하여 개발합니다. 배포 시 JBoss EAP 6의 배포 스캐너가 애플리케이션에 포함된 Log4j 설정을 찾아 JBoss의 LogManager에서 처리합니다. 이렇게 되면 애플리케이션의 Log4j 설정에 지정된 로그 파일에 남는 것이 아니라 JBoss의 로그 핸들러 파일에 남습니다.
이 방식을 설정하는 옵션이 'org.jboss.as.logging.per-deployment' 입니다. 기본값은 true입니다. false로 설정하면 배포 스캐너가 Log4j 설정을 찾지 않고, 로깅 기능을 애플리케이션에서 실행할 수 있도록 합니다.
애플리케이션에서 Log4j를 사용하는 경우가 대부분이기 때문에 항상다음 옵션을 사용할 것을 권장합니다.
export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.as.logging.per-deployment=false "
애플리케이션에서 Log4j JAR와 JBoss의 Log4j가 충돌하는 현상이 발생하면 다음과 같이 jboss-deployment-structure.xml을 사용하여 JBoss EAP 6가 제공하는 Logging 프레임워크 모듈을 제외시켜야 합니다. 이 설정은 JBoss EAP 6.1 이후 버전부터는 사용할 필요가 없습니다.
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
3. 도메인 로그 |
도메인 모드에서는 프로세스 컨트롤러와 호스트 컨트롤러(도메인 컨트롤러) 간의 통신 시 연결이 끊어지거나, 서버의 시작 및 정지, 관리 오퍼레이션을 실행할 ㄸ 로그 파일에 출력합니다.
도메인 모드에서 서버와 컨트롤러 프로세스가 출력하는 로그 파일은 다음 표와 같습니다.
로그 파일 | 설명 |
$JBOSS_HOME/domain/log/host-controller/boot.log | 호스트 컨트롤러 부팅 로그 파일 |
$JBOSS_HOME/domain/log/process-controller/boot.log | 프로세스 컨트롤러 부팅 로그 파일 |
$JBOSS_HOME/domain/servers/$SERVER_NAME/log/boot.log | 지정된 서버의 서버 부팅 로그 파일 |
$JBOSS_HOME/domain/servers/$SERVER_NAME/log/server.log | 지정된 서버가 시작된 이후 모든 로그 메시지가 기록되는 파일 |
도메인 모드에서 서버는 스탠드얼론 ㅁㅗ드와 마찬가지로 boot.log, server.log에 로그를 출력합니다. 로그의 출력 내용이나 로그 설정은 스탠드 얼론 모드와 같고 로그 출력 위치는 '$jboss.domain.servers.dir/서버명/log'입니다.
(1) 호스트 컨트롤러의 로그 레벨
도메인 모드의 호스트 컨트롤러와 프로세스 컨트롤러의 로그 레벨은 logging.properties 파일에서 지정합니다.
logging.properties 파일에 다음과 같이 환경 변수를 사용할 수 있도록 설정되어 있습니다.
# Root logger level
logger.level=${jboss.boot.server.log.level:INFO}
도메인을 시작할 때 다음과 같이 시스템 환경 변수를 컨트롤러 프로세스의 로그 레벨을 변경할 수 있습니다. 이 설정을 변경하면, 프로세스 컨트롤러와 호스트 컨트롤러의 로그 출력 레벨이 모두 변경됩니다.
$ ./domain.sh -Djboss.boot.server.log.level=DEBUG
참고 서적 : 거침없이 배우는 JBoss
'IT 이야기 > JBoss EAP' 카테고리의 다른 글
JBoss EAP 6과 친해지기 19탄 - 클러스터링 #2 (0) | 2020.12.24 |
---|---|
JBoss EAP 6과 친해지기 19탄 - 클러스터링 #1 (0) | 2020.12.24 |
JBoss EAP 6과 친해지기 17탄 - 보안 서브시스템 (2) | 2020.12.21 |
JBoss EAP 6과 친해지기 16탄 - 웹 서비스 서브시스템 (0) | 2020.12.21 |
JBoss EAP 6과 친해지기 15탄 - 메시징 서브시스템 (0) | 2020.12.18 |
댓글