https://docs.jboss.org/author/display/WFLY10/Logging+Configuration を読んだ。
WildFly 10が持ってるログのとこ良く分からんなーという感じだったので読んだ。
Logging Configuration
Overview
全体的なサーバのログ設定はlogging subsytemで指定します。logging subsytemは4つの構成要素があり、handler
, logger
, root logger
(ログカテゴリ), profile
があります。loggerはhandler(もしくはその組み合わせ)を参照します。hadlerはログフォーマットと出力を宣言します。
<subsystem xmlns="urn:jboss:domain:logging:3.0"> <console-handler name="CONSOLE" autoflush="true"> <level name="DEBUG"/> <formatter> <named-formatter name="COLOR-PATTERN"/> </formatter> </console-handler> <periodic-rotating-file-handler name="FILE" autoflush="true"> <formatter> <named-formatter name="PATTERN"/> </formatter> <file relative-to="jboss.server.log.dir" path="server.log"/> <suffix value=".yyyy-MM-dd"/> </periodic-rotating-file-handler> <logger category="com.arjuna"> <level name="WARN"/> </logger> [...] <root-logger> <level name="DEBUG"/> <handlers> <handler name="CONSOLE"/> <handler name="FILE"/> </handlers> </root-logger> <formatter name="PATTERN"> <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/> </formatter> <formatter name="COLOR-PATTERN"> <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/> </formatter> </subsystem>
Attributes
ルート要素には二つの属性add-logging-api-dependencies
とuse-deployment-logging-config
があります。
add-logging-api-dependencies
add-logging-api-dependencies
はデプロイ対象物に暗黙的なロギングAPIの依存性をコンテナが追加するかどうかを制御します。デフォルトのtrue
の場合はすべての暗黙的なロギングAPIの依存性が追加されます。false
の場合は追加されません。
use-deployment-logging-config
use-deployment-logging-config
はデプロイ対象物がper-deployment loggingのスキャン対象にするかどうかを制御します。デフォルトのtrue
の場合はper-deployment loggingは有効化されます。false
の場合は無効化されます。
Per-deployment Logging
Per-deployment loggingを使うと、デプロイ対象物にログ設定ファイルを追加するとその設定ファイルに従ったロギングが行われます。EARでは設定ファイルはMETA-INF
ディレクトリに配置します。WARやJARではMETA-INF
かWEB-INF/classes
に置きます。
以下の設定ファイルが使用可能です。
なおuse-deployment-logging-config
属性をfalse
に変更することでこの機能を無効化できます。
Logging Profiles
Logging profilesはlogging subsystemsを追加する感じのものです。個々のLogging profilesは上述の四要素のうちhandler
, logger
, root logger
の三つで構成されます。
デプロイ対象物にはmanifest経由でlogging profileを割り当てられます。MANIFEST.MF
ファイルにLogging-Profile
エントリを追加してその値にlogging profileのidを指定します。/subsystem=logging/logging-profile=ejbs
で定義したlogging profileはMANIFEST.MFで以下のように指定します。
Manifest-Version: 1.0 Logging-Profile: ejbs
logging profileは複数のデプロイ対象物で指定可能です。また、logging profileを使うことで実行時に設定を変更可能になります。これはper-deployment loggingにはない利点で、ログ設定の変更を反映するのに再デプロイが不要です。
Default Log File Locations
Managed Domain
managed domainでは二種類のログファイルが存在し、Controllerとserver logsがあります。controllerコンポーネントは全体的なドメインを管理します。このコンポーネントはサーバインスタンスのstart/stopとドメイン全体のマネージド操作実行を担当します。Server logsには特定のサーバインスタンスのログ情報が含まれます。これらのログは稼働中のサーバとホストに配置されます。
説明を簡単にするためマネージドドメインのデフォルトのセットアップを見ます。この場合ドメインコントローラーコンポーネントとサーバは両方とも同一ホスト上に存在します。
Process | Log File |
---|---|
Host Controller | ./domain/log/host-controller.log |
Process Controller | ./domain/log/process-controller.log |
“Server One” | ./domain/servers/server-one/log/server.log |
“Server Two” | ./domain/servers/server-two/log/server.log |
“Server Three” | ./domain/servers/server-three/log/server.log |
Standalone Server
standaloneサーバのデフォルトのログファイルはディストリビューションのlogディレクトリにあります。
Process | Log File |
---|---|
Server | ./standalone/log/server.log |
Filter Expressions
Filter Type | Expression | Description | Parameter(s) | Examples |
---|---|---|---|---|
accept | accept | すべてのログメッセージを許容 | なし | accept |
deny | deny | すべてのログメッセージを拒否 | なし | deny |
not | not(filterExpression) | 引数としてフィルタを取りその戻り値を反転 | 引数に一つのフィルタを取る | not(match(“JBAS”)) |
all | all(filterExpressions) | チェーンの複数フィルタから成るフィルタ。あるフィルタがunloggableなログメッセージを検出する場合、そのメッセージはログ出力されず、それ以降のフィルタはチェックされません。 | 引数にフィルタリストのカンマ区切りを取る | all(match(“JBAS”), match(“WELD”)) |
any | any(filterExpressions) | チェーンの複数フィルタから成るフィルタ。あるフィルタがログ出力可能なメッセージを検出する場合、そのメッセージはログ出力され、それ以降のフィルタはチェックされません。 | 引数にフィルタリストのカンマ区切りを取る | any(match(“JBAS”), match(“WELD”)) |
levelChange | levelChange(level) | ログレコードを別のレベルに変更するフィルタ | 引数にレベルの文字列を一つ取る | levelChange(WARN) |
levels | levels(levels) | リストで示すレベルのログメッセージを含むフィルタ。 | 引数にレベルのカンマ区切りのリストを取る | levels(DEBUG, INFO, WARN, ERROR) |
levelRange | levelRange([minLevel,maxLevel]) | あるレベル範囲内のログを出力するフィルタ | 最小レベルを"[“、最大レベルを”]“で示すフィルター式です。反対に”(“と”)“はそのレベルを含みません。式の最初の引数が最小レベルで、二つ目が最大レベルです。 | 最小レベルはERROR未満で最大レベルはDEBUGより大きい。 levelRange(ERROR, DEBUG) 最小レベルはERROR以下で最大レベルはDEBUGより大きい。 levelRange[ERROR, DEBUG) 最小レベルはERROR以下で最大レベルはINFO以上。 levelRange[ERROR, INFO] |
match | match(“pattern”) | 正規表現ベースのフィルタ。パターンマッチには未フォーマットの生メッセージが使われます。 | この式は引数に正規表現を取る。 | match(“JBAS\d+”) |
substitute | substitute(“pattern”, “replacement value”) | パターンに最初にマッチする箇所をreplacementの値で置換するフィルタ。 | 最初の引数がパターンで次が置換するテキスト | substitute(“JBAS”, “EAP”) |
substituteAll | substituteAll(“pattern”, “replacement value”) | パターンにマッチするすべての箇所をreplacementの値で置換するフィルタ。 | 最初の引数がパターンで次が置換するテキスト | substituteAll(“JBAS”, “EAP”) |
List Log Files and Reading Log Files
ログファイルは管理操作で参照や一覧表示ができます。参照可能なログファイルは意図的に制限されており、jboss.server.log.dir
に存在するファイルで既知のファイルハンドラを関連付けているファイルに限られます。既知のファイルハンドラの種類はfile-handler
, periodic-rotating-file-handle
, size-rotating-file-handler
です。管理操作はstandaloneとdomainモードの両方で有効です。
List Log Files
logging subsystemにはログファイルを一覧表示するlog-file
があります。これにはsubsystem rootのリソースとlogging-profile
のリソースは含みません。*1
CLI command and output
[standalone@localhost:9990 /] /subsystem=logging:read-children-names(child-type=log-file) { "outcome" => "success", "result" => [ "server.log", "server.log.2014-02-12", "server.log.2014-02-13" ] }
Read Log File
read-log-file
オペレーションはlog-file
リソースに対して使用可能です。このオペレーションには4つのオプションパラメータがあります。
Name | Description |
---|---|
encoding | 読み込むファイルのエンコーディング |
lines | ファイルの行数。-1はすべて読み込む |
skip | 読み込む前にスキップする行数 |
tail | trueでファイルの終端から、falseで開始から読み込む |
CLI command and output
[standalone@localhost:9990 /] /subsystem=logging/log-file=server.log:read-log-file { "outcome" => "success", "result" => [ "2014-02-14 14:16:48,781 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-11) JBAS015012: Started FileSystemDeploymentService for directory /home/jperkins/servers/wildfly-8.0.0.Final/standalone/deployments", "2014-02-14 14:16:48,782 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-8) JBAS010400: Bound data source [java:jboss/myDs]", "2014-02-14 14:16:48,782 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-15) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]", "2014-02-14 14:16:48,786 INFO [org.jboss.as.server.deployment] (MSC service thread 1-9) JBAS015876: Starting deployment of \"simple-servlet.war\" (runtime-name: \"simple-servlet.war\")", "2014-02-14 14:16:48,978 INFO [org.jboss.ws.common.management] (MSC service thread 1-10) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final", "2014-02-14 14:16:49,160 INFO [org.wildfly.extension.undertow] (MSC service thread 1-16) JBAS017534: Registered web context: /simple-servlet", "2014-02-14 14:16:49,189 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS018559: Deployed \"simple-servlet.war\" (runtime-name : \"simple-servlet.war\")", "2014-02-14 14:16:49,224 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management", "2014-02-14 14:16:49,224 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990", "2014-02-14 14:16:49,225 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Final \"WildFly\" started in 1906ms - Started 258 of 312 services (90 services are lazy, passive or on-demand)" ] }
FAQ
Why is there a logging.properties file?
configurationディレクトリのlogging.properties
の存在をご存知かもしれません。サーバ起動時にlogging subsystemが開始するまではこれがロギングの設定になります。もしlogging subsystemを設定で含めない場合、このファイルがサーバ全体のロギング設定として振る舞います。
logging.properties
ファイルはブート時に上書きされ、変更箇所はlogging subsystemに反映されます。ファイルに加えられた変更は永続化されません。XML configurationもしくは管理操作で加えられた変更はlogging.properties
に永続化されて次回のブート時に使用されます。
*1:The logging subsystem has a log-file resource off the subsystem root resource and off each logging-profile resource to list each log file. が原文。二回出てくるoffのあたりがちょっと訳に自信が無い。