如何让JZOS分离-Xtrace的stderr输出与自身输出至不同目标?
解决JZOS Xtrace输出单独定向的方案
1. 通过_EDC_SYSERR环境变量指定专用输出DD
JZOS基于z/OS XL C/C++运行时,Xtrace的调试输出本质是C运行时的stderr流,可以通过_EDC_SYSERR环境变量将其定向到自定义DD,而非默认的//SYSOUT:
- 在JCL里新增一个用于Xtrace的DD,比如绑定到你的管道:
//SYSXTRACE DD PATH='myfifo_pipe',PATHOPTS=(ORDWR,OCREAT) - 在STDENV中设置环境变量,把C运行时的stderr指向这个DD:
这样Xtrace的输出会单独进//SYSXTRACE,JZOS自身的启动日志、提示信息仍留在//SYSOUT,无需后续过滤。_EDC_SYSERR=SYSXTRACE
2. 用JZOS的--stderr-dd参数绑定JVM stderr到指定DD
部分新版JZOS支持--stderr-dd命令行参数,直接把JVM的stderr(包含Xtrace输出)绑定到自定义DD:
- 先在JCL中定义目标DD:
//SYSXTRACE DD PATH='myfifo_pipe',PATHOPTS=(ORDWR,OCREAT) - 在
JZOS_CMD_LINE里加上这个参数,放在Java主类之前:
注意:旧版本JZOS可能没有这个参数,需要先确认版本兼容性。JZOS_CMD_LINE=--stderr-dd=SYSXTRACE HelloWorld -Xtrace print=mt,...
3. 分离JZOS启动日志,复用//STDERR
如果前两种方法不可行,可以把JZOS自身的日志转到其他DD,让Xtrace输出用//STDERR:
- 在JCL中新增
//JZOSLOG DD SYSOUT=*(或指定其他输出位置) - 在STDENV中设置:
这样JZOS的启动信息会输出到//JZOSLOG,Xtrace的stderr流则会进入你原本的//STDERR,直接把//STDERR绑定到管道即可。JZOS_LOG_DD=JZOSLOG
内容的提问来源于stack exchange,提问作者Robert Schreiber
相关产品推荐
相关产品推荐

