SYSOUT is how JCL routes output streams to JES spool classes. Easytrieve jobs generate listings, diagnostics, DISPLAY messages, and formatted reports; SYSOUT decides where those streams go. Beginners often say “the report is in SYSOUT,” but the precise meaning is that a DD statement routed output to a SYSOUT class. Learning that distinction helps you find missing reports, separate diagnostics from business output, and understand how production report distribution works.
SYSOUT is not the same kind of thing as SYSIN, SYSPRINT, or STEPLIB. SYSIN and SYSPRINT are DD names. STEPLIB is also a DD name with a special loader purpose. SYSOUT is a parameter used on an output DD statement. It tells JES to place output in a spool class, where it can be viewed, printed, held, archived, or routed to a writer. The most common beginner example is SYSPRINT DD SYSOUT=*.
The asterisk means “use the default output class.” A specific class such as SYSOUT=A, SYSOUT=X, or SYSOUT=(A,INTRDR) depends on site standards. One shop may use class A for printed reports, H for held output, X for test diagnostics, and another class for automated distribution. Always check local rules before assuming class letters.
12345//RUNRPT EXEC PGM=PAYRPT //STEPLIB DD DSN=PROD.APP.LOADLIB,DISP=SHR //PERSNL DD DSN=PROD.HR.PERSONNEL,DISP=SHR //SYSPRINT DD SYSOUT=* //PAYLIST DD SYSOUT=A
SYSPRINT routes diagnostics to the default spool class. PAYLIST routes the business report to class A. If a user says the payroll listing is missing, you should inspect PAYLIST, not only SYSPRINT. If a developer says the job failed, you should inspect SYSPRINT first because that stream usually has messages and return-code context.
A SYSOUT class is a JES-defined bucket for output. Classes can control whether output is held, printed, routed, archived, purged quickly, or picked up by a report distribution product. The same Easytrieve report can be visible in SDSF, sent to a printer, or stored in an archive depending on the class and destination parameters. SYSOUT is therefore both a developer convenience and an operations control.
| Routing pattern | Meaning |
|---|---|
| SYSOUT=* | Use default output class for this job or environment |
| SYSOUT=A | Send output to class A; actual behavior depends on site JES setup |
| SYSOUT=H | Often used by sites for held output, but class names are local |
| SYSOUT=(A,writer) | Route output to class A and an external writer name |
| SYSOUT=*,DEST=... | Route spool output to a specific destination or node |
Small Easytrieve examples may put everything on SYSPRINT, which is fine when learning. Production jobs often separate output streams. Diagnostics go to SYSPRINT, while reports go to named DD statements such as REPORT, PAYOUT, EXTRACT, or a site-standard name. This separation prevents a business recipient from receiving compiler messages and helps support staff read failures without scrolling through the whole report.
123REPORT PAY-RPT LINESIZE 80 TITLE 01 'PAYROLL AUDIT REPORT' LINE 01 DEPT EMPNAME EMPNO GROSS
The REPORT statement defines layout. JCL output DDs define routing. If the report writer sends PAY-RPT to a particular output stream by site convention or report option, that stream must be allocated correctly. A source change can make a report more readable, but a SYSOUT routing change decides who sees it and where it appears.
Most developers view SYSOUT output through SDSF, IOF, or a site-specific spool viewer. You normally filter by job name, owner, job ID, or queue. Then you select an output DD such as JESMSGLG, JESJCL, JESYSMSG, SYSPRINT, or a report DD. Easytrieve messages are usually in SYSPRINT, but allocation and system messages may be in JES outputs. Missing report investigations often require reading both program output and JES routing output.
SYSOUT is excellent for spool review, printing, and report distribution. A dataset is better when another job step must read the output, when retention must outlast spool policies, or when a report becomes a downstream file. Easytrieve can create extracts as sequential datasets while also writing diagnostics to SYSOUT. Do not force every output into spool just because examples do.
| Destination | Use when |
|---|---|
| SYSOUT class | Humans need to view, print, hold, or distribute report text |
| Permanent dataset | Output is an extract, audit artifact, or downstream input |
| Temporary dataset | A later step in the same job consumes the output |
| GDG | Daily or monthly output versions must be retained in cycle order |
A missing report has two broad causes: Easytrieve did not produce it, or JCL/JES routed it somewhere unexpected. Use evidence. SYSPRINT may show zero records selected, report writer messages, or validation failures. JES output may show the DD names and classes created. The report distribution product may show delivery rules. Do not keep rerunning the job until you know which side failed.
Compile jobs also use SYSOUT, usually for SYSPRINT. The compiler listing can be large, so development classes may be retained only briefly. Production compile listings may be archived for audit or change-control proof. If a compile failed and the listing is gone, you lose the best evidence. For critical migrations, route compile SYSPRINT to a class or dataset with appropriate retention.
SYSOUT is convenient but not free. Very large reports consume spool space and can slow output processing. DISPLAY statements for every record can create millions of lines. Production teams therefore set class limits, purge policies, and archival rules. Easytrieve developers should design report output intentionally: print what humans need, write machine-readable extracts to datasets, and keep diagnostics concise.
SYSOUT is like choosing the tray where a printer puts your paper. One tray is for notes the teacher reads. Another tray is for reports that go home to parents. Another tray holds paper until someone checks it. Easytrieve can make the paper, but SYSOUT decides which tray it lands in.
1. SYSOUT is a JCL parameter that controls:
2. SYSPRINT DD SYSOUT=* means:
3. SYSOUT differs from SYSIN because:
4. A missing report may be caused by:
5. Production jobs often separate SYSPRINT from report DDs to: