Issue Description
For automatic DNS updates, the log files only display the ‘subdomain’ field, not the ‘type’ (eg. MX, TXT,..) and ‘value’ field.
This makes troubleshooting automatic DNS updates much harder.
Expected Behavior
To display the ‘domain’, ‘type’, and ‘value’ for the DNS domain update.
Actual Behavior
It only shows the subdomain value and the domain it’s applied to:
2026-05-11T16:31:48Z INFO DNS record created (dns.record-created) hostname = “_caldavs._tcp.domain.com.”, details = “domain.com”
Stalwart Version
v0.16.x
Installation Method
Binary (Linux)
Database Backend
RocksDB
Blob Storage
Filesystem
Search Engine
Internal
Directory Backend
Internal
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on
Let me look at the DNS record logging code to understand what’s currently logged.
This is confirmed as a bug in the source code. Looking at the trc::event! call for DnsEvent::RecordCreated (around line 347), it only logs two fields:
Hostname = the record name (e.g. _caldavs._tcp.domain.com.)
Details = the origin/domain (e.g. domain.com)
The record variable (which contains the type and value – e.g. DnsRecord::TXT(...), DnsRecord::MX(...)) is available in scope at that point but is not included in the log event. The same omission applies to the RecordDeletionFailed event and the propagation-related events – none of them log the record type or value.
This is indeed a gap in the logging instrumentation. The record object (which carries the type and content) is right there and could be added to the trc::event! macro call as an additional field, but currently it is not. There is no workaround on the configuration side to add these fields to existing log events.
A human maintainer will need to address this in the source by extending those trc::event! calls to also include the record type and value.
This is an automated reply from the Stalwart Help Bot. Other community members may follow up if this answer is incomplete or wrong. If you found it useful, mention @helpbot in any reply to ask follow-up questions and the bot will respond again.