20.2. 명령

etc/org.ops4j.pax.logging.cfg 파일을 변경하는 대신 Apache Karaf는 로그 구성을 동적으로 변경하고 로그 콘텐츠를 볼 수 있는 명령 세트를 제공합니다.

20.2.1. log:clear

log:clear 명령은 로그 항목을 지웁니다.

20.2.2. log:display

log:display 명령은 로그 항목을 표시합니다.

기본적으로 rootLogger 의 로그 항목을 표시합니다.

karaf@root()> log:display
2015-07-01 19:12:46,208 | INFO  | FelixStartLevel  | SecurityUtils                    | 16 - org.apache.sshd.core - 0.12.0 | BouncyCastle not registered, using the default JCE provider
2015-07-01 19:12:47,368 | INFO  | FelixStartLevel  | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Starting JMX OSGi agent

로거 인수를 사용하여 특정 로거의 로그 항목을 표시할 수도 있습니다.

karaf@root()> log:display ssh
2015-07-01 19:12:46,208 | INFO  | FelixStartLevel  | SecurityUtils                    | 16 - org.apache.sshd.core - 0.12.0 | BouncyCastle not registered, using the default JCE provider

기본적으로 모든 로그 항목이 표시됩니다. Apache Karaf 컨테이너가 장기 실행 중인 경우 매우 길 수 있습니다. n 옵션을 사용하여 표시할 항목 수를 제한할 수 있습니다.

karaf@root()> log:display -n 5
2015-07-01 06:53:24,143 | INFO  | JMX OSGi Agent   | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Registering org.osgi.jmx.framework.BundleStateMBean to MBeanServer com.sun.jmx.mbeanserver.JmxMBeanServer@27cc75cb with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=5335370f-9dee-449f-9b1c-cabe74432ed1
2015-07-01 06:53:24,150 | INFO  | JMX OSGi Agent   | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Registering org.osgi.jmx.framework.PackageStateMBean to MBeanServer com.sun.jmx.mbeanserver.JmxMBeanServer@27cc75cb with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=5335370f-9dee-449f-9b1c-cabe74432ed1
2015-07-01 06:53:24,150 | INFO  | JMX OSGi Agent   | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Registering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer com.sun.jmx.mbeanserver.JmxMBeanServer@27cc75cb with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=5335370f-9dee-449f-9b1c-cabe74432ed1
2015-07-01 06:53:24,152 | INFO  | JMX OSGi Agent   | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Registering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer com.sun.jmx.mbeanserver.JmxMBeanServer@27cc75cb with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=5335370f-9dee-449f-9b1c-cabe74432ed1
2015-07-01 06:53:24,501 | INFO  | FelixStartLevel  | RegionsPersistenceImpl           | 78 - org.apache.karaf.region.persist - 4.0.0 | Loading region digraph persistence

etc/org.apache.karaf.log.cfg 파일의 size 속성을 사용하여 저장 및 유지되는 항목 수를 제한할 수도 있습니다.

#
# The number of log statements to be displayed using log:display. It also defines the number
# of lines searched for exceptions using log:display exception. You can override this value
# at runtime using -n in log:display.
#
size = 500

기본적으로 각 로그 수준은 다른 색상으로 표시됩니다. ERROR/FATAL은 빨간색, DEBUG in purple, INFO in cyan 등입니다. no-color 옵션을 사용하여 색상을 비활성화할 수 있습니다.

로그 항목 형식 패턴은 etc/org.ops4j.pax.logging.cfg 파일에 정의된 변환 패턴을 사용하지 않습니다. 기본적으로 etc/org.apache.karaf.log.cfg 에 정의된 pattern 속성을 사용합니다.

#
# The pattern used to format the log statement when using log:display. This pattern is according
# to the log4j2 layout. You can override this parameter at runtime using log:display with -p.
#
pattern = %d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n

또한 -p 옵션을 사용하여 동적으로(한 번 실행) 패턴을 변경할 수도 있습니다.

karaf@root()> log:display -p "\%d - \%c - \%m\%n"
2015-07-01 07:01:58,007 - org.apache.sshd.common.util.SecurityUtils - BouncyCastle not registered, using the default JCE provider
2015-07-01 07:01:58,725 - org.apache.aries.jmx.core - Starting JMX OSGi agent
2015-07-01 07:01:58,744 - org.apache.aries.jmx.core - Registering MBean with ObjectName [osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=6361fc65-8df4-4886-b0a6-479df2d61c83] for service with service.id [13]
2015-07-01 07:01:58,747 - org.apache.aries.jmx.core - Registering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer com.sun.jmx.mbeanserver.JmxMBeanServer@27cc75cb with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=6361fc65-8df4-4886-b0a6-479df2d61c83

패턴은 날짜에 %d, 클래스의 %c, 로그 메시지의 경우 %m과 같은 키워드를 사용할 수 있는 일반 Log4j2 패턴입니다.

20.2.3. log:exception-display

log:exception-display 명령은 마지막으로 발생한 예외를 표시합니다.

log:display 명령과 마찬가지로 log:exception-display 명령은 기본적으로 rootLogger 를 사용하지만 logger 인수를 사용하여 로거를 지정할 수 있습니다.

20.2.4. log:get

log:get 명령은 로거의 현재 로그 수준을 표시합니다.

기본적으로 표시된 로그 수준은 루트 로거에서 가져온 것입니다.

karaf@root()> log:get
Logger                              │ Level
────────────────────────────────────┼──────
ROOT                                │ INFO
org.apache.aries.spifly             │ WARN
org.apache.karaf.jaas.modules.audit │ INFO
org.apache.sshd                     │ INFO

로거 인수를 사용하여 특정 로거 를 지정할 수 있습니다.

karaf@root()> log:get ssh
INFO

logger 인수는 ALL 키워드를 사용하여 모든 로거의 로그 수준을 목록으로 표시합니다.

예를 들어 etc/org.ops4j.pax.logging.cfg 파일에서 다음과 같이 자체 로거를 정의했습니다.

log4j2.logger.my.name = MyLogger
log4j2.logger.my.level = DEBUG

해당 로그 수준으로 로거 목록을 확인할 수 있습니다.

karaf@root()> log:get ALL
Logger                              │ Level
────────────────────────────────────┼──────
MyLogger                            │ DEBUG
ROOT                                │ INFO
org.apache.aries.spifly             │ WARN
org.apache.karaf.jaas.modules.audit │ INFO
org.apache.sshd                     │ INFO

log:list 명령은 log:get ALL 의 별칭입니다.

20.2.5. log:log

log:log 명령을 사용하면 로그에 메시지를 수동으로 추가할 수 있습니다. Apache Karaf 스크립트를 만들 때 매우 유용합니다.

karaf@root()> log:log "Hello World"
karaf@root()> log:display
12:55:21.706 INFO [pipe-log:log "Hello World"] Hello World

기본적으로 로그 수준은 INFO이지만 -l 옵션을 사용하여 다른 로그 수준을 지정할 수 있습니다.

karaf@root()> log:clear
karaf@root()> log:log -l ERROR "Hello World"
karaf@root()> log:display
12:55:41.460 ERROR [pipe-log:log "Hello World"] Hello World

20.2.6. log:set

log:set 명령은 로거의 로그 수준을 설정합니다.

기본적으로 rootLogger 의 로그 수준을 변경합니다.

karaf@root()> log:set DEBUG
karaf@root()> log:get
Logger                              │ Level
────────────────────────────────────┼──────
ROOT                                │ DEBUG
...

수준 1 뒤에 로거 인수를 사용하여 특정 로거 를 지정할 수 있습니다.

karaf@root()> log:set INFO my.logger
karaf@root()> log:get my.logger
Logger    | Level
-----------------
my.logger | INFO

level 인수는 Log4j2 로그 수준인 TRACE, DEBUG, INFO, WARN, ERROR, FATAL을 허용합니다.

또한 DEFAULT 특수 키워드도 허용합니다.

DEFAULT 키워드의 목적은 로거 상위 수준의 로거를 사용하기 위해 로거의 현재 수준을 삭제하는 것입니다(및 수준만 수준만, appender와 같은 다른 속성은 삭제되지 않습니다).

예를 들어 다음 로거( etc/org.ops4j.pax.logging.cfg 파일)를 정의했습니다.

rootLogger=INFO,out,osgi:*
my.logger=INFO,appender1
my.logger.custom=DEBUG,appender2

my.logger.custom 로거의 수준을 변경할 수 있습니다.

karaf@root()> log:set INFO my.logger.custom

이제 다음을 수행합니다.

rootLogger=INFO,out,osgi:*
my.logger=INFO,appender1
my.logger.custom=INFO,appender2

my.logger.custom 로거에서 DEFAULT 키워드를 사용하여 수준을 제거할 수 있습니다.

karaf@root()> log:set DEFAULT my.logger.custom

이제 다음을 수행합니다.

rootLogger=INFO,out,osgi:*
my.logger=INFO,appender1
my.logger.custom=appender2

즉, 런타임에 my.logger.custom 로거는 상위 my.logger의 수준을 사용하므로 INFO 임을 의미합니다.

이제 my.logger 로거와 함께 DEFAULT 키워드를 사용하는 경우:

karaf@root()> log:set DEFAULT my.logger

Red Hat은 다음과 같습니다.

rootLogger=INFO,out,osgi:*
my.logger=appender1
my.logger.custom=appender2

따라서 my.logger.custommy.logger 모두 상위 rootLogger 의 로그 수준을 사용합니다.

rootLogger 와 함께 DEFAULT 키워드를 사용할 수 없으며 부모가 없습니다.

20.2.7. log:tail

log:taillog:display 와 정확히 동일하지만 로그 항목을 지속적으로 표시합니다.

log:display 명령과 동일한 옵션 및 인수를 사용할 수 있습니다.

기본적으로 rootLogger 의 항목을 표시합니다.

karaf@root()> log:tail
2015-07-01 07:40:28,152 | INFO  | FelixStartLevel  | SecurityUtils                    | 16 - org.apache.sshd.core - 0.9.0 | BouncyCastle not registered, using the default JCE provider
2015-07-01 07:40:28,909 | INFO  | FelixStartLevel  | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Starting JMX OSGi agent
2015-07-01 07:40:28,928 | INFO  | FelixStartLevel  | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Registering MBean with ObjectName [osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=b44a44b7-41cd-498f-936d-3b12d7aafa7b] for service with service.id [13]
2015-07-01 07:40:28,936 | INFO  | JMX OSGi Agent   | core                             | 68 - org.apache.aries.jmx.core - 1.1.1 | Registering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer com.sun.jmx.mbeanserver.JmxMBeanServer@27cc75cb with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=b44a44b7-41cd-498f-936d-3b12d7aafa7b

log:tail 명령을 종료하려면 CTRL-C를 입력합니다.