Knowledge base

The template language the log formats share verifiedimportantWritten by the Hub

Log lines are rendered from templates with access to whole objects by path and with conditionals — so a log can carry anything a message or a result contains, including our own fields.

In detail

The vendor's documentation presents the formats as a handful of placeholders — {$email}, {$result}, {$date}. The shipped values show something more capable: {$result.state}, {$email.recipient}, {$json.connection.remote_ip} reach into the objects by path, and {if …}{/if} guards fields that may be absent. Two consequences. First, the delivery log can be made to carry identifiers we invented: a message published with a custom property (a campaign id, a warm-up plan number) can have that property written into every attempt line, which is the cheapest way to join MailerQ's output to our own records — no message body involved, no extra queue. Second, the same power applies to data we might not want on disk. Recipient addresses are already there by default; adding personal fields to a template puts them in a plain file that lives until rotation.