jboss-cli 를 통한 로깅 설정
자바 웹 애플리케이션에 대한 로깅은 중요한 일이다. 웹 애플리케이션이 어떻게 동자하는지를 잘 알아야 하는데, 그 방법이 로깅이기 때문이다. 하지만 웹 애플리케이션의 로깅을 변경할 경우에 대부분 웹 애플리케이션을 배포한다. 물론 배포를 하지 않고도 가능하지만, 대부분 배포를 다시 하게 된다.
JBoss 에서는 배포를 하지 않고 jboss-cli 를 통해서 런타임으로 설정이 가능하다.
1 2 |
]$ /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 명령어를 그대로 사용할 수 있다.
1 2 3 4 5 6 |
[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 명령어를 사용해 들어간다.
1 2 3 4 5 |
[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 이 보인다.
1 2 3 4 5 |
[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 를 봐야 한다.
1 2 3 |
[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) 를 추가해 보자.
1 2 3 4 5 6 |
[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) 속성을 다음과 같이 변경할 수 있다.
1 2 3 4 |
[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 로 변경되었다.
핸들러 추가
핸들러 추가는 다음과 같이 한다.
1 2 3 4 |
[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) 부터 따라들어가서 속성을 설정하면 되는식이다.
1 2 3 4 5 6 7 8 9 10 |
[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 |
위와 같이 한줄 명령어로 충분히 가능하다.