Various parts of the ZEBRA system write log messages to the standard system output, and occasionally also to the on-line terminal, if any. Examples of messages provided for are:
a) messages for recoverable errors: read errors, data errors b) intialization messages for: stores, divisions, link areas, files c) termination messages giving statistics of usage of various facilities like memory, files d) operation messages: change in program phase, end-of-file e) watch messages for hopefully rare, expensive events: garbage collection, MZPUSH with relocation f) monitor messages to help the user debug his program
To control the amount of information thus provided to the user, a log level is defined and can be set and reset by the user at execution time. The default log level zero enables the messages which one would usually like to see for record in a production run. The user may reduce the log level to cut out most or all messages; he may increase the level to watch the running of his program, or even to debug his data or his input files.
Separate ZEBRA entities, such as dynamic stores or files, each have their own attached log level, which may be changed by the user at any time. By default they inherit the global system-wide default log-level set by MZEBRA, whose own default is zero.
A somewhat similar system has been used for the debugging of the ZEBRA system itself; the corresponding WRITE statements are still present in the code on the PAM files, although not on the object libraries, and could be activated after re-compilation by setting a special log level.
(The code for generating the logging messages is conditional and can be de-selected at generation time of the ZEBRA binary library. This is controlled by HIGZ conditionals:
+USE, QPRINT, T=INH. deselects all messages +USE, QDEBUG, T=INH. deselects all messages at or above level 2 +USE, QDEVZE. selects the messages for debugging Zebra. )
The log level attached to a particular dynamic store is initialized by MZSTOR, normally to the global default log level. The user may change and re-change it at any time with:
with
IXSTOR index of the store, zero for the primary store LOGL the desired log level, as shown in the following table, which also shows which MZ routines print at this (or higher level): level -3: no log messages at all -2: error messages ZFATAL, ZPHASE -1: terse logging MZEBRA, MZSTOR, ZPHASE 0: normal logging MZDIV, MZLINK +1: log to watch MZLINT, MZGARB, MZPUSH +2: log to monitor calls to ZEBRA MZLINT, MZWORK, MZBOOK, MZLIFT, MZDROP, MZPUSH, MZREPL, MZGARB, MZLOGL ( Messages to debug the ZEBRA system itself: giving LOGL = 100+n sets the log-level to MIN(n,2) and the debug print level to "n" this is not normally available ! )