Logs & log bundle
What the diagnostic log records, how to control its size, and what a log bundle contains, never contains, and how to export and open it.
Last updated
When "the preview will not open" or "this printer always fails", an error code is often not enough. A log bundle packs the context needed to diagnose one incident into a ZIP you save manually and hand to an administrator or attach to a report.
What the diagnostic log records
PrintLink records startup, preview, print and scan stages locally, keeping only sanitised metadata: how options were resolved step by step, the render and spool path, and capability reads.
Events are split across four domains so one investigation reads one file:
| Domain | Records |
|---|---|
| Option resolution, rendering, preview, spooling, job status | |
| Printer | Printer discovery, capability reads, consumables collection |
| Scanner | Scanner discovery, scan parameters and execution |
| App | The service itself: startup, listeners, RPC, security, storage |
Splitting them means they do not drown each other out: one bulk print run does not push several days of consumables records out.
Settings and disk budget
Console → Settings → Diagnostic log:
| Setting | Default | Notes |
|---|---|---|
| Record diagnostic log | On | Turning it off stops writing log files; errors stay in memory and the Errors & diagnostics page still works |
| Retention | 7 days | 1–30 days; older entries are deleted |
| Size limit | 32 MiB | 16–128 MiB; the oldest entries are evicted when full |
The same page shows the log's coverage window (earliest to latest event) in your display timezone, so you can confirm before exporting that the bundle covers the moment in question.
You can also turn on verbose logging for 15 minutes or an hour, after which it reverts automatically. "Clean now" deletes the local log (exported bundles are unaffected).
Preview render self-test
The preview render self-test runs a built-in sample page through the same render path as a real preview, to tell whether the local preview pipeline is healthy. It only runs when you click it and reads none of your files. Running it before exporting adds the result to the bundle.
Exporting a log bundle
Three entry points produce the same file:
- Export log bundle in Settings → Diagnostic log;
- Export log bundle on the printer health page;
- Export log bundle on the fallback screen when the UI itself fails.
A system save dialog appears with a file name like printlink-logs-….zip, and you
choose where it goes. Exporting works even when the print service is not
running — which is exactly when an occupied port or a failed listener makes it
most valuable.
What is inside
| File | Contents |
|---|---|
manifest.json | Version, generation time, timezone, event window and counts, per-file checksums |
system.json | PrintLink version and build, OS and version, diagnostic storage state |
devices.json | Printer and scanner facts (below) |
summary.json | Sanitised configuration summary, job overview, health alerts |
events/*.jsonl | Events split by domain, one per line, ready for rg / jq |
error-counts.json | Recent error codes and event counts |
self-tests/ | Results of any self-test you just ran |
devices.json exists for "what is wrong with this machine":
- Printers: name, driver, connection type, whether default, current state and reason codes, plus the collection result per consumable source — the answer to "ink levels cannot be read" is usually here;
- Scanners: model, connection type, supported input sources, state and reason codes;
- Scan timelines: how far recent scans got, how long each step took, and where they stopped.
Times follow your timezone
Every human-facing time in the bundle (generation time, the event window, each
event, even the ZIP file name) is rendered in the display timezone chosen in the
console and carries an offset, e.g. 2026-09-09T17:20:58.123+08:00.
The reason is simple: when you report "the 5:20 pm one", the bundle should show the same clock reading rather than making someone convert UTC in their head. The offset keeps the value an unambiguous instant.
The default "system timezone (automatic)" uses the local timezone.
What is never included
- Any content: printed documents, rendered artefacts, scanned images;
- Credentials such as tokens;
- Binary assets such as images and fonts;
- File paths, device addresses, or the list of sites allowed to connect.
Printer names are included
The bundle includes local printer names and driver names so you can tell which one keeps failing. If a queue name contains a site, department or person's name, be aware of that before sharing. Device network addresses are not included.
How to open it
The bundle is a plain ZIP:
Double-click in Explorer, or:
Expand-Archive .\printlink-logs-….zip -DestinationPath .\bundleOnce unpacked, start an options investigation with events/print.jsonl, and a
consumables investigation with events/printer.jsonl plus devices.json.
It is never uploaded automatically
A bundle is only saved where you choose. PrintLink does not go online because something failed, and never contacts an upload endpoint.