Libertyの以下のログについて、デフォルトのファイルへの出力とJSON形式での標準出力への出力のフォーマットを比較します。
- messages.log
- http_access.log
- FFDCログ
- messages.logに出力されるスタックトレース
今回は、deployment.yamlに以下の環境変数を設定して、messages.log、http_access.log、FFDCログが標準出力にJSON形式で出力されるようにしています。デフォルトでは、これらのログはファイルシステムへ出力されます。
WLP_LOGGING_CONSOLE_SOURCE:標準出力に出力するログの種類を指定
WLP_LOGGING_CONSOLE_FORMAT:ログの出力形式を指定
env:
- name: WLP_LOGGING_CONSOLE_LOGLEVEL
value: info
- name: WLP_LOGGING_CONSOLE_SOURCE
value: message,accessLog,ffdc
- name: WLP_LOGGING_CONSOLE_FORMAT
value: json
見やすさのため、ファイルシステムの出力および標準出力は改行・整形しています。JSON形式のログについてはキーごとに改行し、標準出力のFFDCおよびスタックトレースに含まれる\nは改行して表示しています。実際には、いずれも1行のログとして出力されます。
messages.log
- ファイルシステムの出力
[7/31/26, 6:31:22:419 GMT] 0000002f com.ibm.ws.kernel.feature.internal.FeatureManager A CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 2.276 seconds.
- 標準出力(JSON)
{
"type":"liberty_message",
"host":"backend-liberty-686fb7f58f-7hfpk",
"ibm_userDir":"\/opt\/ol\/wlp\/usr\/",
"ibm_serverName":"defaultServer",
"message":"CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 2.276 seconds.",
"ibm_threadId":"0000002f",
"ibm_datetime":"2026-07-31T06:31:22.419+0000",
"ibm_messageId":"CWWKF0011I",
"module":"com.ibm.ws.kernel.feature.internal.FeatureManager",
"loglevel":"AUDIT",
"ibm_sequence":"1785479482419_0000000000021",
"ext_thread":"Default Executor-thread-1"
}
ファイルシステムのmessages.logに出ているものは、すべて標準出力にも含まれています。標準出力のJSONログには、type、host、ibm_userDir、ibm_serverName、ibm_sequence、ext_threadといった、messages.logにはないフィールドも出力されています。
http_access.log
- ファイルシステムの出力
10.131.0.13 - [31/Jul/2026:06:37:43 +0000] "GET /api-app/api/system/currentTime HTTP/1.1" 200 48
- 標準出力(JSON)
{
"type":"liberty_accesslog",
"host":"backend-liberty-686fb7f58f-7hfpk",
"ibm_userDir":"\/opt\/ol\/wlp\/usr\/",
"ibm_serverName":"defaultServer",
"ibm_remoteHost":"10.131.0.13",
"ibm_requestProtocol":"HTTP\/1.1",
"ibm_requestHost":"10.131.0.143",
"ibm_bytesReceived":48,
"ibm_requestMethod":"GET",
"ibm_requestPort":"9080",
"ibm_elapsedTime":379009,
"ibm_responseCode":200,
"ibm_uriPath":"\/api-app\/api\/system\/currentTime",
"ibm_userAgent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/150.0.0.0 Safari\/537.36 Edg\/150.0.0.0",
"ibm_datetime":"2026-07-31T06:37:43.215+0000",
"ibm_sequence":"1785479862826_0000000000001"
}
messages.log同様、ファイルシステムのhttp_access.logに出ているものは、すべて標準出力にも含まれています。一方で、標準出力のJSONログには、type、host、ibm_userDir、ibm_serverName、ibm_requestHost、ibm_requestPort、ibm_elapsedTime、ibm_userAgent、ibm_sequenceといった、http_access.logにはないフィールドも出力されています。
以下に、messages.logとhttp_access.logで、標準出力のJSON出力にのみ出力されたフィールドをまとめました。
| フィールド | 説明 | 対象 |
|---|---|---|
| type | ログの種類 | 共通 |
| host | ログの発生元サーバーのホスト名 | 共通 |
| ibm_userDir | ログの発生元サーバーのユーザーディレクトリ | 共通 |
| ibm_serverName | ログの発生元サーバー名 | 共通 |
| ibm_sequence | ログのシーケンス番号 | 共通 |
| ext_thread | ログの発生元スレッド名 | messages.log |
| ibm_requestHost | リクエストのホストIPアドレス | http_access.log |
| ibm_requestPort | リクエストのポート番号 | http_access.log |
| ibm_elapsedTime | リクエストの処理にかかった時間 | http_access.log |
| ibm_userAgent | リクエストのuserAgentの値 | http_access.log |
FFDC
FFDC(First Failure Data Capture)は、Libertyでエラー発生時に、障害解析に必要な診断情報を自動的に収集する機能です。
ファイルの場合、ffdcイベントが発生すると<ログ出力先>/ffdcディレクトリーが自動で作成され、サマリーファイルと詳細ファイルが記録されます。
- exception_summary_*.log(サマリーファイル)
Index Count Time of first Occurrence Time of last Occurrence Exception SourceId ProbeId
------+------+---------------------------+---------------------------+---------------------------
0 1 7/31/26, 6:51:02:987 GMT 7/31/26, 6:51:02:987 GMT java.lang.RuntimeException com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters 1105
- /myLogs/backend-liberty-686fb7f58f-7hfpk/ffdc/ffdc_26.07.31_06.51.02.0.log
------+------+---------------------------+---------------------------+---------------------------
- ffdc_*.log(詳細ファイル)
------Start of DE processing------ = [7/31/26, 6:51:02:990 GMT ]
Exception = java.lang.RuntimeException
Source = com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters
probeid = 1105
Stack Dump = java.lang.RuntimeException: Intentional Exception happen from HTTP request
at com.example.saml.servlet.ExceptionTestServlet.doGet(ExceptionTestServlet.java:29)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1262)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:751)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:448)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:197)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:100)
at com.ibm.ws.security.jaspi.JaspiServletFilter.doFilter(JaspiServletFilter.java:58)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1069)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1260)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5106)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:328)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1047)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1563)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:761)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:721)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:571)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:505)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:365)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:332)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:169)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:77)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:513)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:583)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:967)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1056)
at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:344)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Dump of callerThis
Object type = com.ibm.ws.webcontainer.osgi.filter.WebAppFilterManagerImpl
_filterWrappers = class java.util.concurrent.ConcurrentHashMap@1ab7a4ac
serialVersionUID = "/* Could not access serialVersionUID */"
MAXIMUM_CAPACITY = "/* Could not access MAXIMUM_CAPACITY */"
DEFAULT_CAPACITY = "/* Could not access DEFAULT_CAPACITY */"
MAX_ARRAY_SIZE = "/* Could not access MAX_ARRAY_SIZE */"
DEFAULT_CONCURRENCY_LEVEL = "/* Could not access DEFAULT_CONCURRENCY_LEVEL */"
LOAD_FACTOR = "/* Could not access LOAD_FACTOR */"
TREEIFY_THRESHOLD = "/* Could not access TREEIFY_THRESHOLD */"
UNTREEIFY_THRESHOLD = "/* Could not access UNTREEIFY_THRESHOLD */"
MIN_TREEIFY_CAPACITY = "/* Could not access MIN_TREEIFY_CAPACITY */"
MIN_TRANSFER_STRIDE = "/* Could not access MIN_TRANSFER_STRIDE */"
RESIZE_STAMP_BITS = "/* Could not access RESIZE_STAMP_BITS */"
MAX_RESIZERS = "/* Could not access MAX_RESIZERS */"
RESIZE_STAMP_SHIFT = "/* Could not access RESIZE_STAMP_SHIFT */"
MOVED = "/* Could not access MOVED */"
TREEBIN = "/* Could not access TREEBIN */"
RESERVED = "/* Could not access RESERVED */"
HASH_BITS = "/* Could not access HASH_BITS */"
NCPU = "/* Could not access NCPU */"
serialPersistentFields = "/* Could not access serialPersistentFields */"
table = "/* Could not access table */"
nextTable = "/* Could not access nextTable */"
baseCount = "/* Could not access baseCount */"
sizeCtl = "/* Could not access sizeCtl */"
transferIndex = "/* Could not access transferIndex */"
cellsBusy = "/* Could not access cellsBusy */"
counterCells = "/* Could not access counterCells */"
keySet = "/* Could not access keySet */"
values = "/* Could not access values */"
entrySet = "/* Could not access entrySet */"
U = "/* Could not access U */"
SIZECTL = "/* Could not access SIZECTL */"
TRANSFERINDEX = "/* Could not access TRANSFERINDEX */"
BASECOUNT = "/* Could not access BASECOUNT */"
CELLSBUSY = "/* Could not access CELLSBUSY */"
↑ 標準出力(ibm_objectDetails)では、この途中までが出力されている
↓ 以降は標準出力には出力無し
CELLVALUE = "/* Could not access CELLVALUE */"
ABASE = "/* Could not access ABASE */"
ASHIFT = "/* Could not access ASHIFT */"
keySet = "/* Could not access keySet */"
values = "/* Could not access values */"
chainCache = class com.ibm.ws.webcontainer.filter.WebAppFilterManager$ChainCache@fb2798da
chainCacheMap = class java.util.concurrent.ConcurrentHashMap@b1cabd20
serialVersionUID = "/* Could not access serialVersionUID */"
(以下、38行分省略)
isMRU = false
mruMaxSize = 200
forwardChainCache = class com.ibm.ws.webcontainer.filter.WebAppFilterManager$ChainCache@deb22d16
chainCacheMap = class java.util.concurrent.ConcurrentHashMap@1838d528
...
includeChainCache = class com.ibm.ws.webcontainer.filter.WebAppFilterManager$ChainCache@a4ed1521
errorChainCache = class com.ibm.ws.webcontainer.filter.WebAppFilterManager$ChainCache@7faeea1d
chainCacheMRUThreshold = 10
_filtersDefined = true
FMI_MAPPING_SINGLE_SLASH = 0
FMI_MAPPING_PATH_MATCH = 1
FMI_MAPPING_EXTENSION_MATCH = 2
FMI_MAPPING_EXACT_MATCH = 3
logger = class com.ibm.ws.logging.internal.WsLogger@71ae661b
webAppConfig = class com.ibm.ws.webcontainer.osgi.webapp.WebAppConfiguration@1e6f0916
...(以降省略、全体で2000行以上)
- 標準出力(JSON)
{
"type":"liberty_ffdc",
"host":"backend-liberty-686fb7f58f-7hfpk",
"ibm_userDir":"\/opt\/ol\/wlp\/usr\/",
"ibm_serverName":"defaultServer",
"ibm_datetime":"2026-07-31T06:51:02.987+0000",
"message":"Intentional Exception happen from HTTP request",
"ibm_className":"com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters",
"ibm_exceptionName":"java.lang.RuntimeException",
"ibm_probeID":"1105",
"ibm_threadId":"00000249",
"ibm_stackTrace":"java.lang.RuntimeException: Intentional Exception happen from HTTP request
at com.example.saml.servlet.ExceptionTestServlet.doGet(ExceptionTestServlet.java:29)
... (残り33行省略)",
"ibm_objectDetails":"Object type = com.ibm.ws.webcontainer.osgi.filter.WebAppFilterManagerImpl
_filterWrappers = class java.util.concurrent.ConcurrentHashMap@1ab7a4ac...(残り34行省略)",
"ibm_sequence":"1785480662987_0000000000001"
}
ffdc_*.log全体の出力は2,000 行以上に及びましたが、そのうち先頭から約77行目までが標準出力に出力されていることを確認できました。
ffdc_*.logで出力された、Exception、Source、ProbeId、Stack Dump、Dump of callerThisに相当するフィールドは、いずれも標準出力でも出力されていました。
標準出力のibm_stackTraceには、ffdc_*.log(ファイルシステム)のStack Dumpと同一の内容が出力されていました。また、標準出力のibm_objectDetailsには、ffdc_*.logのDump of callerThisの冒頭部分が出力されていましたが、内容は途中で打ち切られており、全体は出力されていませんでした。
スタックトレース
スタックトレースとは、エラー発生時に、どのメソッドがどの順番で呼び出されていたのかを記録した情報です。本記事では、messages.logに出力されたスタックトレースについて比較します。
- ファイルシステム
[7/29/26, 14:26:04:970 GMT] 000002e0 com.ibm.ws.webcontainer.util.ApplicationErrorUtils E SRVE0777E: Exception thrown by application class 'com.ise.yshk.servlet.ExceptionTestServlet.doGet:31'
java.lang.RuntimeException: Intentional Exception happen from HTTP request
at com.ise.yshk.servlet.ExceptionTestServlet.doGet(ExceptionTestServlet.java:31)
at jakarta.servlet.http.HttpServlet.doHead(HttpServlet.java:221)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:544)
(24行分省略)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
[7/29/26, 14:26:04:972 GMT]
- 標準出力(JSON)
{
"type":"liberty_message",
"host":"backend-liberty-69b5d9f44d-wmxh4",
"ibm_userDir":"\/opt\/ol\/wlp\/usr\/",
"ibm_serverName":"defaultServer",
"message":"SRVE0777E: Exception thrown by application class 'com.ise.yshk.servlet.ExceptionTestServlet.doGet:31'
java.lang.RuntimeException: Intentional Exception happen from HTTP request
at com.ise.yshk.servlet.ExceptionTestServlet.doGet(ExceptionTestServlet.java:31)
at jakarta.servlet.http.HttpServlet.doHead(HttpServlet.java:221)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:544)
(24行分削除)
at java.base\/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base\/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base\/java.lang.Thread.run(Unknown Source)",
"ibm_threadId":"000002e0",
"ibm_datetime":"2026-07-29T14:26:04.970+0000",
"ibm_messageId":"SRVE0777E",
"module":"com.ibm.ws.webcontainer.util.ApplicationErrorUtils",
"loglevel":"ERROR",
"ibm_sequence":"1785335164970_0000000000058",
"ext_appName":"api-ffdc",
"ext_thread":"Default Executor-thread-678"
}
messages.logでは、エラーメッセージやスタックトレースが複数行で出力されますが、標準出力ではmessages.logのタイムスタンプから次のタイムスタンプまでの内容が、1つのJSONエントリーとして出力されます。
まとめ
Libertyの各ログについて、ファイルシステムへの出力とJSON形式での標準出力への出力のフォーマットの違いを比較しました。
messages.logやhttp_access.logはファイルシステムに出力される内容はすべて標準出力にも含まれ、さらに標準出力のみに出力されるフィールドもありました。一方、FFDCについては、標準出力に出力される内容が途中で打ち切られていたため、用途に応じて使い分けが必要です。