如何通过CHGJOB记录CL命令到假脱机文件?CL程序日志生成失败求助
IBM i中CHGJOB命令记录CL命令日志的问题解答
问题1:如何执行CHGJOB操作,使所有CL命令都记录到假脱机文件中?
要让作业里的所有CL命令(包括交互式输入的和CL程序内的)都完整记录到作业日志假脱机文件,你需要通过CHGJOB调整两个核心参数:
- 执行这条命令完成配置:
CHGJOB LOG(4 0 *SECLVL) LOGCLPGM(*YES)LOG(4 0 *SECLVL):第一个值4表示记录所有级别消息,0意味着无消息过滤,*SECLVL确保安全相关操作也被记录,不会漏掉任何命令细节;LOGCLPGM(*YES):这是关键参数,它会强制将CL程序中的每一条命令写入作业日志,无论执行成功还是失败。
- 配置完成后,后续所有CL操作都会被记录到作业日志假脱机文件。你可以通过
WRKJOB查看当前作业日志,或用WRKSPLF找到以QPJOBLOG开头的对应假脱机文件。
问题2:调用CL程序前运行CHGJOB未生效,未生成任何日志?
这种情况通常是CHGJOB作用范围不符或程序内部覆盖了日志设置,给你几个排查和解决方向:
1. 检查作业运行方式
如果你在交互式作业中执行CHGJOB,再用SBMJOB提交CL程序到后台运行,那么CHGJOB只修改了当前交互式作业的配置,后台新作业不会继承该设置。此时需要在提交作业时直接指定日志参数:
SBMJOB CMD(CALL PGM(YOURLIB/YOURCLPGM)) LOG(4 0 *SECLVL) LOGCLPGM(*YES)
这样后台作业从启动时就带着正确的日志配置,所有CPYF、删除命令等操作都会被完整记录。
2. 排查CL程序内部设置
有些CL程序会在代码中自行执行CHGJOB或CHGPGM修改日志参数,导致外部设置被覆盖。你可以打开CL程序源代码,搜索是否有修改LOG或LOGCLPGM的语句,若有则删除或调整为你需要的日志级别。
3. 在CL程序开头强制配置日志
最稳妥的方式是直接在CL程序开头加入CHGJOB命令,确保程序运行时的日志配置始终正确,无论调用方式如何:
PGM /* 先配置日志参数,确保所有命令被记录 */ CHGJOB LOG(4 0 *SECLVL) LOGCLPGM(*YES) /* 业务命令示例 */ CPYF FROMFILE(SOURCEFILE) TOFILE(TARGETFILE) DLTF FILE(YOURLIB/TEMPFILE) /* ...其他操作 */ ENDPGM
这样程序运行时第一步就会调整好作业日志设置,后续所有命令都会被记录到假脱机文件中。
最后确认下作业的JOBLOG参数为*YES(默认值),若被改为*NONE则不会生成假脱机日志,可通过CHGJOB JOBLOG(*YES)修正。
内容的提问来源于stack exchange,提问作者Mustapha George
相关产品推荐
相关产品推荐

