yaz-log - Man Page

Log handling in all yaz-based programs

Synopsis

yaz-XXXX [-v loglevel,​.​.​.] [-l logfile]

Description

All YAZ-based programs use a common log subsystem, and should support common command line options for controlling it​. This man page documents those​.

Options

-l logfile

Specify the file where the log is to be written​. If none is specified, stderr is used​. The log is appended to this file​. If the file grows overly large, it is silently rotated: It is renamed to logfile​.1, logfile​.2, ​.​., 9 (old such file is deleted), and a new file is opened​. The limit defaults to 1GB, but can be set by the program​. The rotating limit can be specified with option -r for the YAZ frontend server (yaz-ztest)​.

Rotation can also be implicitly enabled by using a filename which gets changed for a given date, due to substitutions as given by the strftime(3) function​.

-v loglevel

Specify the logging level​. The argument is a set of log level names, separated by commas (no whitespace!), optionally preceded by a '-' to negate that level​. Most programs have their own default, often containing fatal,warn,log, and some application-specific values​. The default list can be cleared with the word none, or individual bits can be removed by prefixing them with a dash '-'​.

Log Levels to Control Logging

Some of the log levels control the way the log is written​.

flush causes the log to be flushed after every write​. This can have serious implications to performance, and should not be used in production​. On the other hand, when debugging a program crash, this can be extremely useful​. The option debug implies flush as well​.

notime prevents the writing of time stamps​. This is intended for automatic test scripts, which should produce predictable log files that are easy to compare​.

General Log Levels in Yaz Itself

YAZ itself uses the following log levels:

fatal for fatal errors, that prevent further execution of the program​.

warn for warnings about things that should be corrected​.

debug for debugging​. This flag may be used temporarily when developing or debugging yaz, or a program that uses yaz​. It is practically deprecated, you should be defining and using your own log levels (see below)​.

all turns on almost all hard-coded log levels​.

loglevel logs information about the log levels used by the program​. Every time the log level is changed, lists all bits that are on​. Every time a module asks for its log bits, this is logged​. This can be used for getting an idea of what log levels are available in any program that uses yaz-log​. Start the program with -v none,loglevel, and do some common operations with it​. Another way is to grep for yaz_log_module_level in the source code, as in

      find ​. -name '*​.[ch]' -print |
         xargs grep yaz_log_module_level |
         grep '"' |
         cut -d'"' -f2 |
         sort -u

eventl, malloc, nmem, odr are used internally for debugging yaz​.

Log Levels for Clients

zoom logs the calls to the zoom API, which may be useful in debugging client applications​.

Log Levels for Servers

server logs the server functions on a high level, starting up, listening on a port, etc​.

session logs individual sessions (connections)​.

request logs a one-liner for each request (init, search, etc​.)​.

requestdetail logs the details of every request, before it is passed to the back-end, and the results received from it​.

Each server program (zebra, etc​.) is supposed to define its own log levels in addition to these​. As they depend on the server in question, they can not be described here​. See above how to find out about them​.

Logging Examples

See what log levels yaz-ztest is using:

    yaz-ztest -1 -v none,loglevel
    14:43:29-23/11 [loglevel] Setting log level to 4096 = 0x00001000
    14:43:29-23/11 [loglevel] Static  log bit 00000001 'fatal' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000002 'debug' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000004 'warn' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000008 'log' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000080 'malloc' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000800 'flush' is off
    14:43:29-23/11 [loglevel] Static  log bit 00001000 'loglevel' is ON
    14:43:29-23/11 [loglevel] Static  log bit 00002000 'server' is off
    14:43:29-23/11 [loglevel] Dynamic log bit 00004000 'session' is off
    14:43:29-23/11 [loglevel] Dynamic log bit 00008000 'request' is off
    14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session'
    14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x2000 for 'server'
    14:44:13-23/11 yaz-ztest [loglevel] returning NO log bit for 'eventl'
    14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session'
    14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x8000 for 'request'
    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'requestdetail'
    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'odr'
    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'ztest'

See the details of the requests for yaz-ztest

   ​./yaz-ztest -1 -v requestdetail
   14:45:35-23/11 yaz-ztest [server] Adding static Z3950 listener on tcp:@:9999
   14:45:35-23/11 yaz-ztest [server] Starting server ​./yaz-ztest pid=32200
   14:45:38-23/11 yaz-ztest [session] Starting session from tcp:127​.0​.0​.1 (pid=32200)
   14:45:38-23/11 yaz-ztest [requestdetail] Got initRequest
   14:45:38-23/11 yaz-ztest [requestdetail] Id:        81
   14:45:38-23/11 yaz-ztest [requestdetail] Name:      YAZ
   14:45:38-23/11 yaz-ztest [requestdetail] Version:   2​.0​.28
   14:45:38-23/11 yaz-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort
   14:45:38-23/11 yaz-ztest [request] Init from 'YAZ' (81) (ver 2​.0​.28) OK
   14:45:39-23/11 yaz-ztest [requestdetail] Got SearchRequest​.
   14:45:39-23/11 yaz-ztest [requestdetail] ResultSet '1'
   14:45:39-23/11 yaz-ztest [requestdetail] Database 'Default'
   14:45:39-23/11 yaz-ztest [requestdetail] RPN query​. Type: Bib-1
   14:45:39-23/11 yaz-ztest [requestdetail]  term 'foo' (general)
   14:45:39-23/11 yaz-ztest [requestdetail] resultCount: 7
   14:45:39-23/11 yaz-ztest [request] Search Z: @attrset Bib-1 foo  OK:7 hits
   14:45:41-23/11 yaz-ztest [requestdetail] Got PresentRequest​.
   14:45:41-23/11 yaz-ztest [requestdetail] Request to pack 1+1 1
   14:45:41-23/11 yaz-ztest [requestdetail] pms=1048576, mrs=1048576
   14:45:41-23/11 yaz-ztest [request] Present: [1] 1+1  OK 1 records returned

Log Filename Examples

A file with format my_YYYYMMDD​.log (where Y, M, D is year, month, and day digits) is given as follows: -l my_%Y%m%d​.log ​. And since the filename is depending on day, rotation will occur on midnight​.

A weekly log could be specified as -l my_%Y%U​.log​.

Files

prefix/include/yaz/log​.h prefix/src/log​.c

See Also

yaz(7) yaz-ztest(8) yaz-client(1) strftime(3)

Authors

Index Data

Referenced By

yaz-ztest(8).

09/10/2026 YAZ 5.38.0 Conventions and miscellaneous