Newsletters   Subscriptions  Forums  Store   Career  Media Kit  About Us  Contact  Search   Home 
fhg
Volume 5, Number 7 -- February 16, 2005

Remove Misleading Messages from Job Logs

Hey Ted:


Job logs get too large in our shop, and it's hard to find the information that helps us determine why a program went wrong. How can we reduce the size of our job logs? Specifically, how can we keep from writing messages that are not really errors? An example would be a CL command that we've monitored for that may or may not fail.

--Mitch


I understand your concern. I can think of a lot of more useful things to do with my time than wading through a job log of hundreds of pages. I am familiar with one application that fills the job with so many messages that the job log wraps twice before the job ends.

The first thing I'd do is to make sure that CL program commands are not being logged. Logging commands may be helpful during development, but I can't think of a single time when logging CL commands helped me during a production run.

You've hit on something with your second question. It's not uncommon in good CL programming to execute a command that may fail and, if it fails, to either ignore the error or pursue some other course of action. In the following code example, a work file may or may not already exist in QTEMP. If it exists, the file should be cleared. If it does not exist, the file should be created.

CLRPFM     FILE(QTEMP/CUSTWORK)                             
MONMSG     MSGID(CPF3142) EXEC(DO)                          
   CRTDUPOBJ  OBJ(CUSTOMER) FROMLIB(*LIBL) OBJTYPE(*FILE) + 
                TOLIB(QTEMP) NEWOBJ(CUSTWORK)               
ENDDO

If the Clear Physical File Member (CLRPFM) command succeeds, the job log contains completion message CPC3101 (Member CUSTREC file CUSTWORK in QTEMP cleared).

But if the command fails, the job log contains escape message CPF3142 (File CUSTWORK in library QTEMP not found). As you're reading the job log, you have to pause and decide whether that message indicates an error. A job log full of such "non-error" messages can slow down your progress in tracking the cause of an abnormal job end.

You can't keep from writing such messages, but you can easily remove them from the job log. Use the Receive Message (RCVMSG) command, as the following example illustrates.

CLRPFM     FILE(QTEMP/CUSTWORK)                             
MONMSG     MSGID(CPF3142) EXEC(DO)                          
   RCVMSG     MSGTYPE(*EXCP) RMV(*YES)                      
   CRTDUPOBJ  OBJ(CUSTOMER) FROMLIB(*LIBL) OBJTYPE(*FILE) + 
                TOLIB(QTEMP) NEWOBJ(CUSTWORK)               
ENDDO

You may want to do the same sort of thing in programs written in other languages. Here is an example from RPG.

/free                                                          
     monitor;                                                   
        three = one / two;                                      
     on-error;                                                  
        three = *zero;                                           
     endmon;

The programmer has decided not to halt the program if something goes wrong with the division operation, but to set variable THREE to zero and keep going. If TWO has a value of zero, escape message MCH1211 (Attempt made to divide by zero for fixed point operation) gets written to the job log.

Use the Receive Program Message (QMHRCVPM) API to remove the unneeded escape message from the job log.

D/copy prototypes,QMHRCVPM                                      
                                                                
D MsgInfo         s              8a                             
D ErrorCode       s              8a   inz(x'0000000000001000')  
                                                                
 /free                                                          
     monitor;                                                   
        three = one / two;                                      
     on-error;                                                  
        three = *zero;                                          
        QMHRCVPM (MsgInfo: %size(MsgInfo): 'RCVM0100':          
                 '*': *zero: '*EXCP': *blanks: *zero:           
                 '*REMOVE': ErrorCode);                         
     endmon;

Here's the prototype referred to in the /COPY directive.

D QMHRCVPM        pr                  extpgm('QMHRCVPM') 
D  MsgInfo                       8a                      
D  MsgInfoLen                   10i 0 const              
D  FormatName                    8a   const              
D  CallStackEntr                10a   const              
D  CallStackCtr                 10i 0 const              
D  MsgType                      10a   const              
D  MsgKey                        4a   const              
D  WaitTime                     10i 0 const              
D  MsgAction                    10a   const              
D  ErrorStruct                        like(ErrorCode)

--Ted


Click here to contact Ted Holt by e-mail.

Sponsored By
ITERA

What would it cost your company if your
iSeries was down for 2½ days?

One large iSeries shop recently experienced a crippling system failure followed by a series of complications that kept the system down for 2½ days!

Fortunately they had just installed iTera's Echo2 High Availability.

The result: no data was lost, little downtime occurred and users barely had a clue.

Click here to read the full story.


Technical Editors: Howard Arner, Joe Hertvik, Ted Holt,
Shannon O'Donnell, Kevin Vandever
Managing Editor: Shannon Pastore
Contributing Technical Editors: Joel Cochran, Wayne O. Evans, Raymond Everhart,
Bruce Guetzkow, Marc Logemann, David Morris
Publisher and Advertising Director: Jenny Thomas
Advertising Sales Representative: Kim Reed
Contact the Editors: To contact anyone on the IT Jungle Team
Go to our contacts page and send us a message.


THIS ISSUE
SPONSORED BY:

ProData Computer Svcs
iTera
Patrick Townsend & Associates


BACK ISSUES

TABLE OF
CONTENTS
OPNQRYF and ILE

Remove Misleading Messages from Job Logs

Admin Alert: Making a Remote Output Queue Look Like a Printer Device


The Four Hundred
IBM Issues PTFs to Patch RAID Controllers

eServer i5 Line Enhanced with New Features

The i5 Gets SAP, Clear Technologies Solution Editions

Four Hundred Stuff
Service Packs Put a Crimp in Third Party Maintenance Plans

Neartek's Virtual Storage Engine Certified for Use with iSeries

Gumbo Software Adds File Splitting to Spool Tools

Four Hundred Monitor


Copyright © 1996-2008 Guild Companies, Inc. All Rights Reserved.
Guild Companies, Inc. (formerly Midrange Server), 50 Park Terrace East, Suite 8F, New York, NY 10034
Privacy Statement