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 π
-llogfile β bestie, this one picks the file where the log gets written. Don't specify one? Thenstderrgets 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 tologfile.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 β¨)
-vloglevel β 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 containingfatal,warn,log, plus some application-specific values. You can clear the whole default list with the wordnone, 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 optiondebugimpliesflushas 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 foryaz_log_module_levelin 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.hprefix/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
- arch rolling: yaz 5.38.1-1 Β· LicenseRef-yaz
- fedora 44: yaz 5.38.1-1.fc44 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms