YAZ-LOG(7)

πŸ’– yaz-log β€” bestie's guide to Log handling in all yaz-based programs πŸ’–

okay so. this is yaz-log, from the YAZ manual family, and it's literally the lore doc for how logging works across every yaz-based program. no cap. if you've ever wondered where all those log lines come from and how to boss them around, this is it. pour a lil something, sit down, we're doing this together 🫢


✨ SYNOPSIS ✨

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

like, that's the whole vibe. two options, infinite power πŸ’…


🌸 DESCRIPTION 🌸

So here's the tea: every single YAZ-based program shares one common log subsystem, and they're all supposed to support the same common command line options to control it. This man page is the receipts for those options. That's it. That's the whole assignment. πŸŽ€


πŸ’… OPTIONS πŸ’…

  • -l logfile β€” bestie, this one picks the file where the log gets written. Don't specify one? Then stderr gets it. The log is appended to this file (never overwritten, we're respectful πŸ’–). And here's the iconic part: if the file gets overly large, it gets silently rotated. It's renamed to logfile.1, logfile.2, .., 9 (and yeah, the oldest such file gets deleted, rip πŸͺ¦), and then a brand new file is opened. The limit defaults to 1GB, but the program can set it. For the YAZ frontend server (yaz-ztest), you can set the rotating limit with option -r.

Rotation can also be implicitly enabled by using a filename that gets changed for a given date, because of substitutions as given by the strftime(3) function. (date-stamped filenames = automatic rotation, we love a set-and-forget moment ✨)

  • -v loglevel β€” this sets the logging level. The argument is a set of log level names, separated by commas (no whitespace, fr fr, not even one tiny space), optionally preceded by a - to negate that level. Most programs have their own default, often containing fatal,warn,log, plus some application-specific values. You can clear the whole default list with the word none, or remove individual bits by prefixing them with a dash -. πŸ¦‹

🌈 LOG LEVELS TO CONTROL LOGGING 🌈

Some log levels don't log stuff so much as they control how the log gets written. very meta, very main character:

  • 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 you're 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. listen to the warnings bestie.
  • 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). kinda giving "we keep it around for the vibes" ngl.
  • all β€” turns on almost all hard-coded log levels. maximum chaos mode πŸ”₯
  • loglevel β€” logs information about the log levels used by the program. Every time the log level is changed, it 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. (iykyk 🫢)

πŸ¦‹ LOG LEVELS FOR CLIENTS πŸ¦‹

  • zoom β€” logs the calls to the zoom API, which may be useful in debugging client applications. that's your one (1) client-side level, keep it close.

πŸ’œ 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. the gossipy one, we stan. πŸ‘‘

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. (yeah, go do the loglevel trick, it works, I promise πŸŽ€)


⭐ 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'

(look at that 'loglevel' is ON line, she's the moment ✨)

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

the way requestdetail spills everything and request gives you the one-liner recap… that's the duo right there πŸ˜­πŸ’–


πŸŽ€ 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 🌟


🫢 AUTHORS 🫢

Index Data


and that's the whole page bestie, you ate it πŸ’… this was written for YAZ 5.38.1, dated 10/16/2026 β€” go forth and log responsibly, and please, for the love of everything, don't run flush in production. periodt. βœ¨πŸŒˆπŸ‘‘

πŸ“¦ where this page comes from