查看 Java 批处理作业日志

在 WebSphere Application Server Liberty 中运行 Java 批处理作业时,将为每个作业编写一个日志。

日志按以下目录结构创建:

log directory/joblogs/job name/date/instance.job instance ID/execution.execution ID

注意: 变量 job name 为 JSL (XML) 文档内的 job 元素的 id 属性。它不一定与 JSL 文件的文件名相关。
日志命名从 part.1.log 开始,并根据需要转至新日志部分。缺省情况下,作业日志包含所有消息及执行该作业执行的线程在服务器中记录的跟踪信息。系统不会收集未记录在 java.util.logging 框架内的输出。
要点: 如果无法创建新的日志部分,那么批处理将尝试在没有日志或使用当前日志部分的情况下继续处理。

有关使用 REST API 检索或删除作业日志的更多信息,请参阅“REST API 管理”文档。

要点: 如果使用 log4j API,使用 log4j 框架的应用程序可使用 org.apache.log4j.jul.JULAppender 参与批处理作业日志记录。JULAppender 将 log4j 日志记录转发至 java.util.logging 框架,系统可在此处收集它们以进行作业日志记录。

配置作业日志记录

可使用 <batchJobLogging> 配置元素 <batchJobLogging enabled="true" maxRecords="1000" /> 来配置批处理作业日志记录。

属性 maxRecords 指示记录滚动到下一部分前写至作业日志部分的记录数。

此批处理功能部件使用名为 com.ibm.ws.batch.JobLogger 的记录器以将某些批处理消息仅记录至作业日志。示例包括作业生命周期消息和检查点消息。记录器不会写至服务器日志。缺省情况下,记录器支持 Level.FINE 消息。可通过在服务器的跟踪规范中指定记录器级别来配置记录器级别。例如,<logging traceSpecification="*=info:com.ibm.ws.batch.JobLogger=all" />

作业线程编写的任何日志消息(包括运行时和应用程序代码编写的消息)将写至作业日志和服务器日志。

System.outSystem.err 文件仅写至服务器日志,而不会写至作业日志。

分区步骤

对于每个分区,分区步骤具有更多子目录。execution ID 目录中的日志文件包含运行顶级作业的线程中的条目。这些分区的作业日志是使用以下结构存储的:

log directory/joblogs/job name/date/instance.job instance ID/execution.execution ID/name of partitioned step/partition number

要点: 系统将在 name of partitioned step 目录中为每个分区创建一个目录。

拆分流程

如果作业中出现拆分流程,那么系统会创建更多子目录以从每个流程的线程捕获输出。直接位于 execution ID 目录下的日志文件包含运行顶级作业的线程中的条目。各个流程线程的作业日志是使用以下结构存储的:

log directory/joblogs/job name/date/instance.job instance ID/execution.execution ID/split ID/flow ID

要点: 系统将在 split ID 目录中为每个流程创建一个目录。

作业日志事件

如果启用了批处理作业事件,那么在完成作业日志部分且作业转为已结束状态(例如,已停止已失败已完成)时,会发布作业日志事件。作业日志事件消息包含多个 JSON 属性,可帮助识别消息以及实际作业日志文件内容。

要点: JSON 属性属于 JMS 消息体,可通过将消息体文本转换为 JsonObject 并从此对象拉取特定 JSON 属性来检索。
以下示例说明如何检索作业日志内容属性。
//The retrieved job log event message
Message msg
//Convert the Message to a TextMessage
TextMessage txtMsg = (TextMessage) msg;
//Convert the text in the message to a JsonObject
JsonObject jobLogEventObject = Json.createReader(new StringReader(txtMsg.getText())).readObject();
//Pull the job log text content from the JsonObject as an example
JsonArray logContentArray = jobLogEventObject.getJsonArray("contents");

有关启用批处理作业事件的更多信息,请参阅“启用批处理作业事件发布”


用于指示主题类型的图标 参考主题

文件名:rwlp_batch_view_joblog.html