jboss-cli 를 통한 로깅 설정

자바 웹 애플리케이션에 대한 로깅은 중요한 일이다. 웹 애플리케이션이 어떻게 동자하는지를 잘 알아야 하는데, 그 방법이 로깅이기 때문이다. 하지만 웹 애플리케이션의 로깅을 변경할 경우에 대부분 웹 애플리케이션을 배포한다. 물론 배포를 하지 않고도 가능하지만, 대부분 배포를 다시 하게 된다.

JBoss 에서는 배포를 하지 않고 jboss-cli 를 통해서 런타임으로 설정이 가능하다.

]$ /app/wildfly/bin/jboss-cli.sh --connect --controller=192.168.96.7:8080
[standalone@192.168.96.7:8080 /]

만일, 인증을 설정했다면 ID/Password 를 입력해야 한다.

logging Subsystem

Jboss 는 JEE 스펙을 구현한 서버이다. JEE 스펙을 각각 Subsystem 으로 구현해놨다. Subsystem 으로 모듈화를 해놨기 때문에 각각의 설정을 Subsystem 에 귀속되고 서로 간섭되지 않는다. 독립적인 모듈이다 보니 만일 득정 기능을 쓰지 않는다면 Subsystem 을 끄면 되고 그렇게 껐다고 해서 전체 서버가 문제가 되지 않는다. 아주 잘 만들어졌다.

jboss-cli 는 마치 파일시스템의 디렉토리를 접근하듯이 사용한다. 실제 명령어도 cd, ls 명령어를 그대로 사용할 수 있다.

[standalone@192.168.96.7:8080 /] ls
core-service                               path                                       management-major-version=7                 organization=undefined                     release-codename=                          server-state=running                       
deployment                                 socket-binding-group                       management-micro-version=0                 process-type=Server                        release-version=5.0.0.Final                suspend-state=RUNNING                      
deployment-overlay                         subsystem                                  management-minor-version=0                 product-name=WildFly Full                  running-mode=NORMAL                        uuid=18c0682a-b947-481b-8b78-999999999999  
extension                                  system-property                            name=cl-hrdpwas4                           product-version=13.0.0.Final               runtime-configuration-state=ok             
interface                                  launch-type=STANDALONE                     namespaces=[]                              profile-name=undefined                     schema-locations=[]

subsystem 이 보인다. 저곳으로 들어가야 한다. cd 명령어를 사용해 들어간다.

[standalone@192.168.96.7:8080 /] cd subsystem
[standalone@192.168.96.7:8080 subsystem] ls
batch-jberet        datasources         ee                  elytron             jaxrs               jmx                 logging             pojo                resource-adapters   security-manager    webservices         
bean-validation     deployment-scanner  ee-security         infinispan          jca                 jpa                 mail                remoting            sar                 transactions        weld                
core-management     discovery           ejb3                io                  jdr                 jsf                 naming              request-controller  security            undertow

jboss 내에 컴포넌트들이 보이는데, logging 이 보인다.

[standalone@192.168.96.7:8080 subsystem] cd logging
[standalone@192.168.96.7:8080 subsystem=logging] ls
async-handler                        custom-handler                       log-file                             pattern-formatter                    root-logger                          xml-formatter                        
console-handler                      file-handler                         logger                               periodic-rotating-file-handler       size-rotating-file-handler           add-logging-api-dependencies=true    
custom-formatter                     json-formatter                       logging-profile                      periodic-size-rotating-file-handler  syslog-handler                       use-deployment-logging-config=true

logging 관련된 많은 정보들을 볼 수 있다. 여기서는 logger 를 봐야 한다.

[standalone@192.168.96.7:8080 subsystem=logging] cd logger
[standalone@192.168.96.7:8080 logger] ls
com.arjuna           org.jboss.as.config  sun.rmi

위와같이 보일 것이다.

logger 추가하기

이제 여기서 로거(logger) 를 추가해 보자.

[standalone@192.168.96.7:8080 logger] ./kr.pe.systemv:add()
{"outcome" => "success"}
[standalone@192.168.96.7:8080 logger] ls
com.arjuna           kr.pe.systemv        org.jboss.as.config  sun.rmi
[standalone@192.168.96.7:8080 logger] ls kr.pe.systemv
category=kr.pe.systemv    filter=undefined          filter-spec=undefined     handlers=undefined        level=ALL                 use-parent-handlers=true

위와같이 로거를 추가할 수 있다. 하지면 내용을 보면 핸들러(handler) 가 정의되어 있지 않다.

속성 추가

속성을 추가하기 위해서는 write-attribute 를 이용하면 된다. 레벨(level) 속성을 다음과 같이 변경할 수 있다.

[standalone@192.168.96.7:8080 logger] ./kr.pe.systemv:write-attribute(name=level,value=DEBUG)
{"outcome" => "success"}
[standalone@192.168.96.7:8080 logger] ls kr.pe.systemv
category=kr.pe.systemv    filter=undefined          filter-spec=undefined     handlers=undefined        level=DEBUG               use-parent-handlers=true

레빌이 DEBUG 로 변경되었다.

핸들러 추가

핸들러 추가는 다음과 같이 한다.

[standalone@192.168.96.7:8080 logger] ./kr.pe.systemv:add-handler(name=CONSOLE)
{"outcome" => "success"}
[standalone@192.168.96.7:8080 logger] ls kr.pe.systemv
category=kr.pe.systemv    filter=undefined          filter-spec=undefined     handlers=["CONSOLE"]        level=DEBUG               use-parent-handlers=true

한줄 명령어

지금까지 작업을 한줄 명령어 가능하다. 디렉토리 접근법을 사용하기 때문에 루트(root) 부터 따라들어가서 속성을 설정하면 되는식이다.

[standalone@192.168.96.7:8080 /] /subsystem=logging/logger=kr.pe.systemv:remove() # 기존꺼 삭제.
{"outcome" => "success"}
[standalone@192.168.96.7:8080 /] /subsystem=logging/logger=kr.pe.systemv:add()
{"outcome" => "success"}
[standalone@192.168.96.7:8080 /] /subsystem=logging/logger=kr.pe.systemv:write-attribute(name=level,value=DEBUG)
{"outcome" => "success"}
[standalone@192.168.96.7:8080 /] /subsystem=logging/logger=kr.pe.systemv:add-handler(name=CONSOLE)
{"outcome" => "success"}
[standalone@192.168.96.7:8080 /] ls /subsystem=logging/logger=kr.pe.systemv
category=kr.pe.systemv    filter=undefined          filter-spec=undefined     handlers=["CONSOLE"]      level=DEBUG               use-parent-handlers=true

위와 같이 한줄 명령어로 충분히 가능하다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다