QMAIL2DLF.IN(1)
π qmail2dlf β the manual, but make it make sense
okay bestie, so this is the page for qmail2dlf β a lil' Lire tool that lives in the qmail ecosystem. sit down, grab a strawberry drink π, and let's get into it.
β¨ NAME β¨
qmail2dlf β the icon that converts sanitized qmail-send logs into dlf. that's it, that's the job. π
πΈ SYNOPSIS πΈ
qmail2ldf
(yes, that's literally how it's written up there β we keep it exactly like that, no cap π₯)
π DESCRIPTION π
So here's the vibe: qmail2dlf reads qmail-send logs from stdin, writes dlf to stdout, and β if something goes wrong β it complains on stderr. like, it will absolutely tell you about it. main character energy, honestly. π
π°οΈ TIMESTAMPS π°οΈ
We expect timestamps that look like e.g. 977359048.466280500 in our log β that's the number of seconds since the epoch, in any precision. lowkey generous of us, ngl. π«Ά
The log should feature lines that look something like:
982584201.511524 info msg 6426: bytes 3537 from
<qmail-return-63074-joostvb=mdcc.cx@list.cr.yp.to> qp 21089 uid 70
So, the cast of characters π
splogger, as distributed with qmail, writesa numerical timestampβ something like972802273.627578, indicating seconds and nanoseconds since the beginning of 1970. iconic behaviour.multilog, as distributed with daemontools, http://cr.yp.to/daemontools.html β if you invoke it with actiont, it writes a@and a tai64n format timestamp. these look like e.g.4000000039ef8532346bb35c. note that0x400000000000000000000000is2^62. big number, big slay. π
Wanna get the current time in tai64 format? do this:
echo 40000000`(echo obase = 16; date +%s) | bc`00000000
(assuming GNU date is installed, bestie β that part matters β¨)
And to convert tai64n to numerical timestamps, you can use Russ Allbery's tai64nfraq. it's in the public domain, available from http://www.qmail.org/tai64nfrac. king behaviour, honestly. π
π EXAMPLE π
Process a log as produced by splogger:
$ lr_desyslog qmail < mail.log | qmail2dlf
Process a log as produced by multilog:
$ tai64nfrac < current | qmail2dlf
okay so real talk β qmail2dlf(1) will be rarely used on its own, but is way more likely called by lr_log2report:
$ tai64nfrac < /service/qmail-send/log/main/current | \
lr_log2report qmail
that's the actual workflow, iykyk π¦
π BUGS π
ngl, we don't deal with bounces. so you'll get something like this:
email qmail none qmail2dlf info skipping line '986244190.800217 bounce msg
6306 qp 28445': first field should be one of 'new', 'info', 'starting',
'delivery', 'end' or 'status:', not 'bounce'
and second thing π β qmail2dlf doesn't use any information from the qmail-smtpd(1) logs. (these look like
2002-06-16 09:34:57.798038500 tcpserver: pid 19385 from 100.61.24.7
2002-06-16 09:34:58.114198500 tcpserver: ok 19385 foo.example.com:100.163.25.11:25 logreport.iae.nl:212.61.24.7:postfix:1189
.)
β VERSION β
$Id: qmail2dlf.in,v 1.24 2006/07/23 13:16:34 vanbaal Exp $
π COPYRIGHT π
Copyright (C) 2000, 2001 Stichting LogReport Foundation LogReport@LogReport.org
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html.
fr fr, read the license β it's giving "respect the paperwork" π§
π AUTHOR π
Joost van Baal <joostvb@logreport.org>
πΈ that's the whole thing, bestie β courtesy of Lire 2.1.1, dated 2025-09-28. go forth and parse those qmail logs. slay. π β¨
π¦ where this page comes from
- arch rolling: lire 2.1.1-8 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms