Menu Close
第19章 Maven Indexer プラグイン
Maven Indexer プラグインは、Maven プラグインがアーティファクトを Maven Central ですばやく検索できるようにするために必要です。
Maven Indexer プラグインをデプロイするには、以下のコマンドを使用します。
前提条件
Maven Indexer プラグインをデプロイする前に、『Installing on Apache Karaf』の「Preparing to Use Maven」の手順に従ったことを確認してください。
Maven Indexer プラグインのデプロイ
Karaf コンソールに移動し、以下のコマンドを入力し、Maven Indexer プラグインをインストールします。
features:install hawtio-maven-indexer
以下のコマンドを入力して Maven Indexer プラグインを設定します。
config:edit io.hawt.maven.indexer config:proplist config:propset repositories 'https://maven.oracle.com' config:proplist config:update
Maven Indexer プラグインがデプロイされるまで待ちます。これには数分かかる場合があります。ログタブに以下のようなメッセージが表示されるの確認します。
Maven Indexer プラグインがデプロイされたら、次のコマンドを使用して、Maven Indexer プラグイン設定に外部 Maven リポジトリーを追加します。
config:edit io.hawt.maven.indexer
config:proplist
config:propset repositories external repository
config:proplist
config:update
19.1. Log
Apache Karaf は、動的および強力なロギングシステムを提供します。
以下をサポートします。
- OSGi Log Service
- Apache Log4j v1 および v2 フレームワーク
- Apache Commons Logging フレームワーク
- Logback フレームワーク
- SLF4J フレームワーク
- ネイティブ Java Util Logging フレームワーク
これは、アプリケーションが任意のロギングフレームワークを使用できることを意味し、Apache Karaf は中央ログシステムを使用してロガー、アペンダーなどを管理します。
19.1.1. 設定ファイル
初期ログ設定は etc/org.ops4j.pax.logging.cfg
からロードされます。
このファイルは、標準の Log4j2 設定ファイルです。
さまざまな log4j2 要素が見つかります。
- ロガー
- アペンダー
- レイアウト
独自の初期設定をファイルに直接追加できます。
デフォルト設定は以下のとおりです。
# # Copyright 2005-2018 Red Hat, Inc. # # Red Hat licenses this file to you under the Apache License, version # 2.0 (the "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. See the License for the specific language governing # permissions and limitations under the License. # # # Internal Log4j2 configuration # log4j2.status = WARN log4j2.verbose = false log4j2.dest = out # # Common pattern layouts for appenders defined as reusable properties # See https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout # references will be replaced by felix.fileinstall # log4j2.pattern = %d{DEFAULT} | %-5.5p | %-20.20t | %-32.32c{1.} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n #log4j2.pattern = %d{DEFAULT} %-5.5p {%t} [%C.%M()] (%F:%L) : %m%n # # Appenders configuration # # JDBC Appender log4j2.appender.jdbc.type = JDBC log4j2.appender.jdbc.name = JdbcAppender log4j2.appender.jdbc.tableName = EVENTS log4j2.appender.jdbc.cs.type = DataSource log4j2.appender.jdbc.cs.lazy = true log4j2.appender.jdbc.cs.jndiName = osgi:service/jdbc/logdb log4j2.appender.jdbc.c1.type = Column log4j2.appender.jdbc.c1.name = DATE log4j2.appender.jdbc.c1.isEventTimestamp = true log4j2.appender.jdbc.c2.type = Column log4j2.appender.jdbc.c2.name = LEVEL log4j2.appender.jdbc.c2.pattern = %level log4j2.appender.jdbc.c2.isUnicode = false log4j2.appender.jdbc.c3.type = Column log4j2.appender.jdbc.c3.name = SOURCE log4j2.appender.jdbc.c3.pattern = %logger log4j2.appender.jdbc.c3.isUnicode = false log4j2.appender.jdbc.c4.type = Column log4j2.appender.jdbc.c4.name = THREAD_ID log4j2.appender.jdbc.c4.pattern = %thread log4j2.appender.jdbc.c4.isUnicode = false log4j2.appender.jdbc.c5.type = Column log4j2.appender.jdbc.c5.name = MESSAGE log4j2.appender.jdbc.c5.pattern = %message log4j2.appender.jdbc.c5.isUnicode = false # Console appender not used by default (see log4j2.rootLogger.appenderRefs) log4j2.appender.console.type = Console log4j2.appender.console.name = Console log4j2.appender.console.layout.type = PatternLayout log4j2.appender.console.layout.pattern = ${log4j2.pattern} # Rolling file appender log4j2.appender.rolling.type = RollingRandomAccessFile log4j2.appender.rolling.name = RollingFile log4j2.appender.rolling.fileName = ${karaf.data}/log/fuse.log log4j2.appender.rolling.filePattern = ${karaf.data}/log/fuse-%i.log.gz # uncomment to not force a disk flush #log4j2.appender.rolling.immediateFlush = false log4j2.appender.rolling.append = true log4j2.appender.rolling.layout.type = PatternLayout log4j2.appender.rolling.layout.pattern = ${log4j2.pattern} log4j2.appender.rolling.policies.type = Policies log4j2.appender.rolling.policies.size.type = SizeBasedTriggeringPolicy log4j2.appender.rolling.policies.size.size = 16MB log4j2.appender.rolling.strategy.type = DefaultRolloverStrategy log4j2.appender.rolling.strategy.max = 20 # Audit file appender log4j2.appender.audit.type = RollingRandomAccessFile log4j2.appender.audit.name = AuditRollingFile log4j2.appender.audit.fileName = ${karaf.data}/security/audit.log log4j2.appender.audit.filePattern = ${karaf.data}/security/audit.log.%i log4j2.appender.audit.append = true log4j2.appender.audit.layout.type = PatternLayout log4j2.appender.audit.layout.pattern = ${log4j2.pattern} log4j2.appender.audit.policies.type = Policies log4j2.appender.audit.policies.size.type = SizeBasedTriggeringPolicy log4j2.appender.audit.policies.size.size = 8MB # OSGi appender log4j2.appender.osgi.type = PaxOsgi log4j2.appender.osgi.name = PaxOsgi log4j2.appender.osgi.filter = * # # Loggers configuration # # Root logger log4j2.rootLogger.level = INFO log4j2.rootLogger.appenderRef.RollingFile.ref = RollingFile log4j2.rootLogger.appenderRef.PaxOsgi.ref = PaxOsgi log4j2.rootLogger.appenderRef.Console.ref = Console log4j2.rootLogger.appenderRef.Console.filter.threshold.type = ThresholdFilter log4j2.rootLogger.appenderRef.Console.filter.threshold.level = ${karaf.log.console:-OFF} #log4j2.rootLogger.appenderRef.Sift.ref = Routing # Spifly logger log4j2.logger.spifly.name = org.apache.aries.spifly log4j2.logger.spifly.level = WARN # Security audit logger log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit log4j2.logger.audit.level = INFO log4j2.logger.audit.additivity = false log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile # help with identification of maven-related problems with pax-url-aether #log4j2.logger.aether.name = shaded.org.eclipse.aether #log4j2.logger.aether.level = TRACE #log4j2.logger.http-headers.name = shaded.org.apache.http.headers #log4j2.logger.http-headers.level = DEBUG #log4j2.logger.maven.name = org.ops4j.pax.url.mvn #log4j2.logger.maven.level = TRACE
デフォルト設定は、out
file アペンダーを使用して INFO
ログレベルで ROOT
ロガーを定義します。ログレベルを Log4j2 の有効な値に変更できます。最も詳細なログレベルの順に TRACE、DEBUG、INFO、ERROR、FATAL となり、これらを指定できます。
- OSGi アペンダー
-
osgi:*
アペンダーは、ログメッセージを OSGi Log Service に送信するための特別なアペンダーです。 - stdout アペンダー
-
stdout
コンソールアペンダーは事前設定されていますが、デフォルトでは有効化されていません。このアペンダーを使用すると、標準出力に直接ログメッセージを表示できます。Apache Karaf をサーバーモード (コンソールなし) で実行する予定の場合に有用です。
これを有効にするには、stdout
アペンダーを rootLogger
に追加する必要があります。
log4j2.rootLogger=INFO, out, stdout, osgi:*
- out アペンダー
-
外部の
アペンダーはデフォルトです。これは、10 個の 1MB ログファイルを維持およびローテーションするローリングファイルアペンーダです。ログファイルはデフォルトでdata/log/fuse.log
にあります。 - sift アペンダー
-
sift
アペンダーは、デフォルトでは有効になっていません。このアペンダーを使用すると、デプロイされたバンドルごとに 1 つのログファイルを指定できます。デフォルトでは、ログファイルの形式はバンドルシンボリック名(data/log
フォルダー)を使用します。このファイルは実行時に編集できます。Apache Karaf はファイルをリロードし、変更が有効になります。Apache Karaf を再起動する必要はありません。別の設定ファイルは Apache Karaf(etc/org.apache.karaf.log.cfg
)で使用されます。このファイルは、ログコマンドで使用されるログサービスを設定します (後で参照)。 - jdbc アペンダー
-
jdbc
アペンダーにはlazy
フラグがあり、データソースが利用できない場合にはtrue
(有効)、ロギングはデータベースに追加されません。ただし、jndi、データソース、またはコネクションが復活すると、ロギングが再起動します。
log4j2.appender.jdbc.cs.lazy = true
ロギングメッセージが失われないようにするには、緊急アペンダーを設定することをお勧めします。
19.1.2. コマンド
Apache Karaf は etc/org.ops4j.pax.logging.cfg
ファイルを変更する代わりに、ログ設定を変更してログの内容を確認できる一連のコマンドを提供します。
19.1.2.1. log:clear
log:clear
コマンドはログエントリーを消去します。
19.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
logger
引数を使用して、特定のロガーからログエントリーを表示することもできます。
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 は紫、INFO は青緑などです。--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
このパターンは、通常の Log4j2 パターンで、日付の %d、クラスの %c、ログメッセージの %m などのキーワードを使用できます。
19.1.2.3. log:exception-display
log:exception-display
コマンドは、最後に発生した例外を表示します。
log:display
コマンドの場合、log:exception-display
コマンドはデフォルトでは rootLogger
を使用しますが、logger 引数でロガー
を指定できます。
19.1.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
logger
引数を使用して特定のロガーを指定できます。
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
のエイリアスです。
19.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
デフォルトでは、ログレベルは 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
19.1.2.6. log:set
log:set
コマンドはロガーのログレベルを設定します。
デフォルトでは、ルートロガーのログレベルが変更されます 。
karaf@root()> log:set DEBUG karaf@root()> log:get Logger │ Level ────────────────────────────────────┼────── ROOT │ DEBUG ...
レベル
1 の後に logger
引数を使用して、特定のロガーを指定できます。
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 キーワードの目的は、ロガーの親のレベルを使用するために (ロガーは階層的です)、ロガーの現在のレベルを削除します (レベルのみが削除され、アペンダーなどの他のプロパティーは削除されません)。
たとえば、以下のロガーを定義しています(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
以下のようになります。
rootLogger=INFO,out,osgi:* my.logger=appender1 my.logger.custom=appender2
そのため、my.logger.custom
および my.logger
はいずれも親の rootLogger
のログレベルを使用します。
rootLogger
で DEFAULT キーワードを使用することはできず、親はありません。
19.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
log:tail
コマンドから終了するには、CTRL-C と入力します。
19.1.3. JMX LogMBean
log:*
コマンドで実行できるすべてのアクションは LogMBean を使用して実行できます。
LogMBean オブジェクト名は org.apache.karaf:type=log,name=*
です。
19.1.3.1. 属性
-
level 属性は ROOT ロガー
のレベル
です。
19.1.3.2. 操作
-
特定のロガーのログレベルを取得する
getLevel(logger)
この操作は ALL キーワードをサポートするため、各ロガーのレベルを持つ Map を返します。 -
特定の
ロガーのログレベルを設定する setLevel(level, logger)
この操作は、log:set
コマンドの DEFAULT キーワードをサポートします。
19.1.4. 詳細設定
19.1.4.1. フィルター
アペンダーにフィルターを適用できます。フィルターは各ログイベントを評価し、ログに送信するかどうかを決定します。
Log4j2 はすぐに使用できるフィルターを提供します。
包括的なビューについては、Log4J サイトの「Filters」を参照してください。
19.1.4.2. ネストされたアペンダー
ネストされたアペンダーは、特別な種類のアペンダーで、「内部」の別のアペンダーを使用します。これにより、アペンダーのチェーン間にある種の「ルーティング」を作成できます。
最もよく使われる「ネスト準拠」アペンダーは次のとおりです。
-
AsyncAppender(
org.apache.log4j2.AsyncAppender
)はイベントを非同期に記録します。このアペンダーはイベントを収集し、それにアタッチされているすべてのアペンダーにそれらをディスパッチします。 -
RewriteAppender(
org.apache.log4j2.rewrite.RewriteAppender
)は、ログイベントを、ログイベントを書き換えた後に別のアペンダーに転送します。
この種類のアペンダーは、アペンダー定義のアペンダー
プロパティーを受け入れます。
log4j2.appender.[appender-name].appenders=[comma-separated-list-of-appender-names]
たとえば、async
という名前の AsyncAppender を作成し、ログイベントを JMS アペンダーに非同期にディスパッチできます。
log4j2.appender.async=org.apache.log4j2.AsyncAppender log4j2.appender.async.appenders=jms log4j2.appender.jms=org.apache.log4j2.net.JMSAppender ...
19.1.4.3. エラーハンドラー
アペンダーは失敗する場合があります。たとえば、RollingFileAppender
はファイルシステムへの書き込みを試みますが、ファイルシステムが満杯になったり、JMS アペンダーはメッセージの送信を試みますが、JMS ブローカーは利用できません。
ロギングは重要なので、ログアペンダーが失敗したかどうかを知ることが重要です。
各ログアペンダーはエラー処理をエラーハンドラーに委譲できます。これは、アペンダーエラーに対応できます。
-
FailoverAppender(org
.apache.log4j2.varia.FailoverAppender
)を使用すると、プライマリーアペンダーが失敗すると、セカンダリーアペンダーが引き継ぎされます。エラーメッセージはSystem.err に出力され
、セカンダリーアペンダーに記録されます。
FailoverAppender の詳細は、Log4j2 の Apppender ページ を参照してください。
アペンダー定義の errorhandler
プロパティーを使用して、各アペンダーに使用するエラーハンドラーを定義できます。
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]
19.1.4.4. OSGi 固有の MDC 属性
ルーティング
アペンダーは、OSGi 指向のアペンダーで、MDC(マッピング診断コンテキスト)属性に基づいてログイベントを分割できます。
MDC では、ログイベントのさまざまなソースを区別できます。
ルーティング
アペンダーは、デフォルトで OSGi 指向 MDC 属性を提供します。
-
bundle.id
はバンドル ID です。 -
bundle.name
は、バンドルのシンボリック名です。 -
bundle.version
はバンドルバージョンです。
これらの MDC プロパティーを使用して、バンドルごとにログファイルを作成できます。
log4j2.appender.routing.type = Routing log4j2.appender.routing.name = Routing log4j2.appender.routing.routes.type = Routes log4j2.appender.routing.routes.pattern = $$\\{ctx:bundle.name\\} log4j2.appender.routing.routes.bundle.type = Route log4j2.appender.routing.routes.bundle.appender.type = RollingRandomAccessFile log4j2.appender.routing.routes.bundle.appender.name = Bundle-$\\{ctx:bundle.name\} log4j2.appender.routing.routes.bundle.appender.fileName = ${karaf.data}/log/bundle-$\\{ctx:bundle.name\\}.log log4j2.appender.routing.routes.bundle.appender.filePattern = ${karaf.data}/log/bundle-$\\{ctx:bundle.name\\}.log.%d{yyyy-MM-dd} log4j2.appender.routing.routes.bundle.appender.append = true log4j2.appender.routing.routes.bundle.appender.layout.type = PatternLayout log4j2.appender.routing.routes.bundle.appender.policies.type = Policies log4j2.appender.routing.routes.bundle.appender.policies.time.type = TimeBasedTriggeringPolicy log4j2.appender.routing.routes.bundle.appender.strategy.type = DefaultRolloverStrategy log4j2.appender.routing.routes.bundle.appender.strategy.max = 31 log4j2.rootLogger.appenderRef.Routing.ref = Routing
19.1.4.5. OSGi スタックトレースレンダラーの拡張
デフォルトでは、Apache Karaf は特別なスタックトレースレンダラーを提供し、OSGi 固有の情報をいくつか追加します。
スタックトレースでは、例外を発生させるクラスに加えて、各スタックトレース行の最後に [id:name:version]
パターンを検索します。
-
ID
はバンドル ID です。 -
name
はバンドル名です。 -
version
はバンドルバージョンです。
問題の原因を診断するのに非常に役立ちます。
たとえば、以下の IllegalArgumentException スタックトレースでは、例外のソースに関する OSGi の詳細を確認できます。
java.lang.IllegalArgumentException: Command not found: *:foo at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:225)[21:org.apache.karaf.shell.console:4.0.0] at org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:162)[21:org.apache.karaf.shell.console:4.0.0] at org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:101)[21:org.apache.karaf.shell.console:4.0.0] at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:79)[21:org.apache.karaf.shell.console:4.0.0] at org.apache.felix.gogo.runtime.shell.CommandSessionImpl.execute(CommandSessionImpl.java:71)[21:org.apache.karaf.shell.console:4.0.0] at org.apache.karaf.shell.console.jline.Console.run(Console.java:169)[21:org.apache.karaf.shell.console:4.0.0] at java.lang.Thread.run(Thread.java:637)[:1.7.0_21]
19.1.4.6. カスタムアペンダー
Apache Karaf では、独自のアペンダーを使用できます。
これを行う最も簡単な方法は、アペンダーを OSGi バンドルとしてパッケージ化し、org .ops4j.pax.logging.pax-logging-service
バンドルのフラグメントとしてアタッチすることです。
たとえば、My Appender
を作成します。
public class MyAppender extends AppenderSkeleton { ... }
次のようなマニフェストを含む OSGi バンドルとしてコンパイルしてパッケージ化します。
Manifest: Bundle-SymbolicName: org.mydomain.myappender Fragment-Host: org.ops4j.pax.logging.pax-logging-service ...
Apache Karaf システム
フォルダーでバンドルをコピーします。system
フォルダーは、標準の Maven ディレクトリーレイアウトを使用します(groupId/artifactId/version)。
etc/startup.properties
設定ファイルで、pax-logging-service バンドルの前にバンドルを一覧に定義します。
システムバンドルをリロードするには、クリーンな実行( データ
フォルダー)で Apache Karaf を再起動する必要があります。etc/org.ops4j.pax.logging.cfg
設定ファイルでアペンダーを直接使用できるようになりました。