18장. Maven Indexer 플러그인
Maven 플러그인에서 Maven Central이 아티팩트를 빠르게 검색할 수 있도록 하려면 Maven 플러그인에 필요합니다.
Maven Indexer 플러그인을 배포하려면 다음 명령을 사용합니다.
사전 요구 사항
Maven Indexer 플러그인을 배포하기 전에 Apache Karaf preparing to Use Maven 섹션의 지침을 따라야 합니다.
Maven Indexer 플러그인 배포
Karaf 콘솔로 이동하여 다음 명령을 입력하여 Maven Indexer 플러그인을 설치합니다.
features:install hawtio-maven-indexer
features:install hawtio-maven-indexer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 Maven Indexer 플러그인을 구성합니다.
config:edit io.hawt.maven.indexer config:proplist config:propset repositories 'https://maven.oracle.com' config:proplist config:update
config:edit io.hawt.maven.indexer config:proplist config:propset repositories 'https://maven.oracle.com' config:proplist config:update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Maven Indexer 플러그인이 배포될 때까지 기다립니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. 로그 탭에 표시하려면 아래에 표시된 것과 같은 메시지를 확인합니다.
Maven Indexer 플러그인이 배포되면 다음 명령을 사용하여 Maven Indexer 플러그인 구성에 외부 Maven 리포지토리를 추가합니다.
config:edit io.hawt.maven.indexer config:proplist config:propset repositories external repository config:proplist config:update
config:edit io.hawt.maven.indexer
config:proplist
config:propset repositories external repository
config:proplist
config:update
18.1. log 링크 복사링크가 클립보드에 복사되었습니다!
Apache Karaf는 동적이고 강력한 로깅 시스템을 제공합니다.
지원 대상:
- OSGi 로그 서비스
- Apache Log4j v1 및 v2 프레임워크
- Apache Commons Logging 프레임워크
- 로그백 프레임워크
- SLF4J 프레임워크
- 네이티브 Java Util Logging 프레임워크
즉, 애플리케이션에서 모든 로깅 프레임워크를 사용할 수 있으며 Apache Karaf는 중앙 로그 시스템을 사용하여 로거, appenders 등을 관리합니다.
18.1.1. 구성 파일 링크 복사링크가 클립보드에 복사되었습니다!
초기 로그 구성이 etc/org.ops4j.pax.logging.cfg
에서 로드됩니다.
이 파일은 표준 Log4j2 구성 파일입니다.
다양한 Log4j2 요소가 있습니다.
- 로거
- appender
- 레이아웃
파일에 직접 고유한 초기 구성을 추가할 수 있습니다.
기본 구성은 다음과 같습니다.
기본 구성은 파일 appender를 사용하여 INFO
로그 수준으로 ROOT
로거를 정의합니다. 로그 수준을 Log4j2 유효한 값으로 변경할 수 있습니다. 가장 상세 정보에서 최소 상세 정보까지 TRACE, DEBUG, INFO, ERROR 또는 FATAL을 지정할 수 있습니다.
- OSGi appender
-
osgi:*
appender는 로그 메시지를 OSGi 로그 서비스로 보내는 특수 appender입니다. - stdout appender
-
stdout
콘솔 appender는 사전 구성되었지만 기본적으로 활성화되어 있지 않습니다. 이 appender를 사용하면 로그 메시지를 표준 출력에 직접 표시할 수 있습니다. Apache Karaf를 서버 모드에서 실행하려는 경우 콘솔 없이 유용할 수 있습니다.
이를 활성화하려면 stdout
appender를 rootLogger
에 추가해야 합니다.
log4j2.rootLogger=INFO, out, stdout, osgi:*
log4j2.rootLogger=INFO, out, stdout, osgi:*
- out appender
-
out
appender는 기본 항목입니다. 10 1MB 로그 파일을 유지 관리하고 순환하는 롤링 파일 appender입니다. 로그 파일은 기본적으로data/log/fuse.log
에 있습니다. - Sift appender
-
sift
appender
는 기본적으로 활성화되어 있지 않습니다. 이 appender를 사용하면 배포된 번들당 하나의 로그 파일을 사용할 수 있습니다. 기본적으로 로그 파일 이름 형식은 번들 심볼릭 이름(데이터/로그
폴더)을 사용합니다. 런타임 시 이 파일을 편집할 수 있습니다. Apache Karaf는 파일을 다시 로드하고 변경 사항이 적용됩니다. Apache Karaf를 다시 시작할 필요가 없습니다. 다른 설정 파일은 Apache Karaf:etc/org.apache.karaf.log.cfg
에서 사용합니다. 이 파일은 로그 명령에서 사용하는 로그 서비스를 구성합니다(나중에 참조). - JDBC appender
-
jdbc
appender에는lazy
플래그가 있으며,true
(활성화)인 경우 데이터 소스를 사용할 수 없는 경우 데이터베이스에 로깅이 추가되지 않습니다. 그러나 jndi, 데이터 소스 또는 연결이 다시되면 로깅이 다시 시작됩니다.
log4j2.appender.jdbc.cs.lazy = true
log4j2.appender.jdbc.cs.lazy = true
로깅 메시지가 손실되지 않도록 하려면 긴급 추가 기능도 다시 구성하는 것이 좋습니다.
18.1.2. 명령 링크 복사링크가 클립보드에 복사되었습니다!
etc/org.ops4j.pax.logging.cfg
파일을 변경하는 대신 Apache Karaf는 로그 구성을 동적으로 변경하고 로그 콘텐츠를 볼 수 있는 명령 세트를 제공합니다.
18.1.2.1. log:clear 링크 복사링크가 클립보드에 복사되었습니다!
log:clear
명령은 로그 항목을 지웁니다.
18.1.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
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
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
옵션을 사용하여 표시할 항목 수를 제한할 수 있습니다.
etc/org.apache.karaf.log.cfg
파일의 size
속성을 사용하여 저장 및 유지되는 항목 수를 제한할 수도 있습니다.
기본적으로 각 로그 수준은 다른 색상으로 표시됩니다. 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.
#
# 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
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 패턴입니다.
18.1.2.3. log:exception-display 링크 복사링크가 클립보드에 복사되었습니다!
log:exception-display
명령은 마지막으로 발생한 예외를 표시합니다.
log:display
명령과 마찬가지로 log:exception-display
명령은 기본적으로 rootLogger
를 사용하지만 logger
인수를 사용하여 로거를 지정할 수 있습니다.
18.1.2.4. log:get 링크 복사링크가 클립보드에 복사되었습니다!
log:get
명령은 로거의 현재 로그 수준을 표시합니다.
기본적으로 표시된 로그 수준은 루트 로거에서 가져온 것입니다.
로거 인수를 사용하여 특정 로거
를 지정할 수 있습니다.
karaf@root()> log:get ssh 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
log4j2.logger.my.name = MyLogger
log4j2.logger.my.level = DEBUG
해당 로그 수준으로 로거 목록을 확인할 수 있습니다.
log:list
명령은 log:get ALL
의 별칭입니다.
18.1.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
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
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
18.1.2.6. log:set 링크 복사링크가 클립보드에 복사되었습니다!
log:set
명령은 로거의 로그 수준을 설정합니다.
기본적으로 rootLogger
의 로그 수준을 변경합니다.
수준
1 뒤에 로거 인수를 사용하여 특정 로거
를 지정할 수 있습니다.
karaf@root()> log:set INFO my.logger karaf@root()> log:get my.logger Logger | Level ----------------- my.logger | INFO
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
rootLogger=INFO,out,osgi:*
my.logger=INFO,appender1
my.logger.custom=DEBUG,appender2
my.logger.custom
로거의 수준을 변경할 수 있습니다.
karaf@root()> log:set INFO my.logger.custom
karaf@root()> log:set INFO my.logger.custom
이제 다음을 수행합니다.
rootLogger=INFO,out,osgi:* my.logger=INFO,appender1 my.logger.custom=INFO,appender2
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
karaf@root()> log:set DEFAULT my.logger.custom
이제 다음을 수행합니다.
rootLogger=INFO,out,osgi:* my.logger=INFO,appender1 my.logger.custom=appender2
rootLogger=INFO,out,osgi:*
my.logger=INFO,appender1
my.logger.custom=appender2
즉, 런타임에
로거는 상위 my.logger의 수준을 사용하므로 my.logger
.customINFO
임을 의미합니다.
이제 my.logger
로거와 함께 DEFAULT 키워드를 사용하는 경우:
karaf@root()> log:set DEFAULT my.logger
karaf@root()> log:set DEFAULT my.logger
Red Hat은 다음과 같습니다.
rootLogger=INFO,out,osgi:* my.logger=appender1 my.logger.custom=appender2
rootLogger=INFO,out,osgi:*
my.logger=appender1
my.logger.custom=appender2
따라서 my.logger.custom
및 my.logger
모두 상위 rootLogger
의 로그 수준을 사용합니다.
rootLogger
와 함께 DEFAULT 키워드를 사용할 수 없으며 부모가 없습니다.
18.1.2.7. log:tail 링크 복사링크가 클립보드에 복사되었습니다!
log:tail
은 log: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
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를 입력합니다.
18.1.3. Cryostat LogMBean 링크 복사링크가 클립보드에 복사되었습니다!
log:*
명령으로 수행할 수 있는 모든 작업은 LogMBean을 사용하여 수행할 수 있습니다.
LogMBean 오브젝트 이름은 org.apache.karaf:type=log,name=*
입니다.
18.1.3.1. 속성 링크 복사링크가 클립보드에 복사되었습니다!
-
level
속성은 루트 로거의 수준입니다.
18.1.3.2. 작업 링크 복사링크가 클립보드에 복사되었습니다!
-
getLevel(logger)
- 특정 로거의 로그 수준을 가져옵니다. 이 작업은 ALL 키워드를 지원하므로 각 로거의 수준이 포함된 맵을 반환합니다. -
setLevel(level, logger)
을 설정하여 특정 로거의 로그 수준을 설정합니다. 이 작업은log:set
명령에 대해 DEFAULT 키워드를 지원합니다.
18.1.4. 고급 구성 링크 복사링크가 클립보드에 복사되었습니다!
18.1.4.1. 필터 링크 복사링크가 클립보드에 복사되었습니다!
appender에 필터를 적용할 수 있습니다. 필터는 각 로그 이벤트를 평가하고 로그로 보낼지 여부를 결정합니다.
Log4j2는 필터를 사용할 준비가 되어 있습니다.
이에 대한 포괄적인 보기는 Log4J 사이트의 필터 를 참조하십시오.
18.1.4.2. 중첩된 appender 링크 복사링크가 클립보드에 복사되었습니다!
중첩된 appender는 다른 appender를 "내부"하는 특수한 종류의 appender입니다. 이를 통해 appender 체인 사이에 일종의 "라우팅"을 생성할 수 있습니다.
가장 많이 사용되는 "nested compliant" appender는 다음과 같습니다.
-
AsyncAppender(
org.apache.log4j2.AsyncAppender
)는 이벤트를 비동기적으로 기록합니다. 이 appender는 이벤트를 수집하여 연결된 모든 부록에 전달합니다. -
RewriteAppender(
org.apache.log4j2.rewrite.RewriteAppender
)는 로그 이벤트를 다시 작성한 후 다른 appender로 로그 이벤트를 전달합니다.
이러한 종류의 appender는 appender 정의에서 appenders
속성을 허용합니다.
log4j2.appender.[appender-name].appenders=[comma-separated-list-of-appender-names]
log4j2.appender.[appender-name].appenders=[comma-separated-list-of-appender-names]
예를 들어 async
라는 Async 및 비동기적으로 로그 이벤트를 JMS appender에 디스패치하는 AsyncAppender를 생성할 수 있습니다.
log4j2.appender.async=org.apache.log4j2.AsyncAppender log4j2.appender.async.appenders=jms log4j2.appender.jms=org.apache.log4j2.net.JMSAppender ...
log4j2.appender.async=org.apache.log4j2.AsyncAppender
log4j2.appender.async.appenders=jms
log4j2.appender.jms=org.apache.log4j2.net.JMSAppender
...
18.1.4.3. 오류 처리기 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 appender가 실패할 수 있습니다. 예를 들어 RollingFileAppender
는 파일 시스템에 작성하려고 하지만 파일 시스템이 가득거나 JMS appender가 메시지를 전송하려고 하지만 JMS 브로커를 사용할 수 없습니다.
로그 appender가 실패하는지 확인하는 것이 중요하므로 로깅이 중요할 수 있습니다.
각 로그 appender는 오류 처리기에 오류 처리를 위임하여 appender 오류에 대응할 수 있는 기회를 제공합니다.
-
CryostatAppender(
org.apache.log4j2.varia.FailoverAppender
)를 사용하면 기본 추가 기능이 실패할 경우 보조 첨부자가 대신할 수 있습니다. 오류 메시지가System.err
에 출력되고 보조 첨부 파일에 기록됩니다.
Cryostat Appender에 대한 자세한 내용은 Log4j2의 Apppender 페이지로 이동합니다.
appender 정의 자체에서 errorhandler 속성을 사용하여 각 appender에 사용할 오류 처리기
를 정의할 수 있습니다.
log4j2.appender.[appender-name].errorhandler=[error-handler-class] log4j2.appender.[appender-name].errorhandler.root-ref=[true|false] log4j2.appender.[appender-name].errorhandler.logger-ref=[logger-ref] log4j2.appender.[appender-name].errorhandler.appender-ref=[appender-ref]
log4j2.appender.[appender-name].errorhandler=[error-handler-class]
log4j2.appender.[appender-name].errorhandler.root-ref=[true|false]
log4j2.appender.[appender-name].errorhandler.logger-ref=[logger-ref]
log4j2.appender.[appender-name].errorhandler.appender-ref=[appender-ref]
18.1.4.4. OSGi 특정 MDC 속성 링크 복사링크가 클립보드에 복사되었습니다!
sift appender
는 OSGi 지향 appender로 MDC(Mapped Diagnostic Context) 속성을 기반으로 로그 이벤트를 분할할 수 있습니다.
MDC를 사용하면 다양한 로그 이벤트 소스를 구분할 수 있습니다.
sift appender
는 기본적으로 OSGi 지향 MDC 속성을 제공합니다.
-
bundle.id
는 번들 ID입니다. -
bundle.name
은 번들 심볼릭 이름입니다. -
bundle.version
은 번들 버전입니다.
이러한 MDC 속성을 사용하여 번들당 로그 파일을 생성할 수 있습니다.
18.1.4.5. 향상된 OSGi 스택 추적 렌더러 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Apache Karaf는 특정 스택 추적 렌더러를 제공하여 일부 OSGi 특정 정보를 추가합니다.
스택 추적에서 예외를 throw하는 클래스 외에도 각 스택 추적 라인 끝에 [id:name:version]
패턴을 찾을 수 있습니다.
-
번들 ID입니다.
-
번들 이름입니다.
-
version
은 bundle 버전입니다.
문제의 원인을 진단하는 것이 매우 유용합니다.
예를 들어 다음 IllegalArgumentException 스택 추적에서는 예외 소스에 대한 OSGi 세부 정보를 볼 수 있습니다.
18.1.4.6. 사용자 정의 appender 링크 복사링크가 클립보드에 복사되었습니다!
Apache Karaf에서 고유한 appender를 사용할 수 있습니다.
가장 쉬운 방법은 appender를 OSGi 번들로 패키지하고 org.ops4j.pax.logging.pax-logging-service
번들의 조각으로 연결하는 것입니다.
예를 들어 MyAppender
를 만듭니다.
public class MyAppender extends AppenderSkeleton { ... }
public class MyAppender extends AppenderSkeleton {
...
}
다음과 같이 MANIFEST가 포함된 OSGi 번들로 컴파일하고 패키징합니다.
Manifest: Bundle-SymbolicName: org.mydomain.myappender Fragment-Host: org.ops4j.pax.logging.pax-logging-service ...
Manifest:
Bundle-SymbolicName: org.mydomain.myappender
Fragment-Host: org.ops4j.pax.logging.pax-logging-service
...
Apache Karaf 시스템
폴더에 번들을 복사합니다. 시스템
폴더는 표준 Maven 디렉터리 레이아웃인 groupId/artifactId/version을 사용합니다.
etc/startup.properties
구성 파일에서 pax-logging-service 번들 전에 목록에 번들을 정의합니다.
시스템 번들을 다시 로드하려면 새로 실행( 데이터
폴더 수행)을 사용하여 Apache Karaf를 다시 시작해야 합니다. 이제 etc/org.ops4j.pax.logging.cfg
구성 파일에서 직접 appender를 사용할 수 있습니다.