Monitoring and troubleshooting

The headless service has no window, so it reports through log files, the Windows event log and an optional local health endpoint. For support cases it bundles everything into one diagnostic package.


Log files

data\logs\veloxprint-20260925.log
data\logs\veloxprint-20260925_001.log        same day, after the size limit
data\logs\veloxprint-20260925.json           optional, logging.jsonFile
data\logs\lager-nord\veloxprint-...          instance with --config lager-nord.json
2026-09-25 07:16:48.120 +02:00 [INF] [Print] [#35] Task #35 received (WebSocket, Standard) -> WH-LABEL-01, 1 copy
2026-09-25 07:16:49.402 +02:00 [INF] [Print] [#35] Task #35 spooled to WH-LABEL-01, 1 page
2026-09-25 07:16:49.655 +02:00 [INF] [API] Task #35 confirmed as printed

Format: time with offset, level (VRB, DBG, INF, WRN, ERR, FTL), area (API, WS, Print, Engine), task id where known, message.

  1. One file per day, a new file (_001, _002) when logging.maxFileSizeMb (250 MB) is reached.
  2. Files older than logging.retentionDays (30) are deleted, by age, not by count.
  3. Lines of a task carry its task id and trace id; the trace id links it to the history record and print task in VeloxFactory.
  4. The API token never appears in any log.

Windows event log

Warnings and errors go to the event log Application, source VeloxFactory Print Service, with fixed event ids for monitoring systems such as Checkmk, PRTG, Zabbix or SCOM. The source is registered when the scheduled task is set up; without it the event log output stays off. Switch it off with logging.eventLog.

Event id Meaning Action
1000Engine started
1001Engine stoppedUnexpected outside updates and reboots
2000API not reachableNetwork, DNS, proxy, VeloxFactory up?
2001API token rejected (401/403)Token revoked or rights missing, enter a new token
2002Rate limit reached (429)Occasionally harmless. Often: raise API_RATE_LIMIT_PER_MINUTE or the poll intervals
3000WebSocket down longer than 5 minutesReverb, firewall, host, port, app key. Hybrid keeps printing by polling.
4000Print failedError text contains the category
4001Printer missingInstall machine-wide or set an alias
5000Configuration invalidA changed configuration was not applied, the engine keeps the last valid one

Local health endpoint

Optional, switched on under Settings → Operation (health.enabled, port health.port, default 8765). It listens only on 127.0.0.1, needs no URL reservation and no administrator rights, and is not reachable from other machines. A monitoring agent on the same machine polls it.

GET http://localhost:8765/health
{
  "status": "ok",
  "engine": "Running",
  "hostMode": "Headless",
  "version": "2.0.1",
  "startedAt": "2026-09-25T05:01:12+00:00",
  "api": {
    "state": "Ok",
    "lastApiSuccess": "2026-09-25T07:16:49+00:00",
    "lastApiError": null,
    "rateLimit": { "limit": 60, "remaining": 58, "rateLimitedUntil": null }
  },
  "websocket": { "state": "Subscribed", "since": "2026-09-25T05:01:14+00:00", "reconnectAttempt": 0 },
  "queue": { "active": 0, "waiting": 0, "retrying": 0, "outbox": 0 },
  "printers": { "ok": 3, "withProblems": 0 }
}
HTTP status Condition
200, "status": "ok"Engine running or paused, and API state OK, unknown or rate limited
503, "status": "degraded"Everything else, e.g. token rejected or API unreachable
no answerEngine not running

Worth alerting on besides the status: queue.outbox above 0 for a longer time (printed but not confirmed), queue.retrying above 0 (printer problem), printers.withProblems above 0, websocket.state not Subscribed.


Diagnostic package

Info → Create support package, or --support-package C:\Temp\support.zip. The ZIP contains:

versions.txtProgram version, machine, account, Windows, .NET, configuration path, whether a token is stored
config.jsonConfiguration, anything resembling a token removed
engine-status.jsonLast engine status (as in the health endpoint)
printers.txtLocal printers with scope, queue state, jobs, driver and driver version, port, dialog flag
journal-last-500.csvThe last 500 jobs of the journal
outbox.csvOpen confirmations and error reports: task id;kind;attempts;next attempt;last error. Empty is the normal case.
config-changes.csvLast 500 configuration changes: time, account, changed keys
scheduled-task.txtXML definition of the scheduled task
logs/The 7 newest log files

The API token is removed from every file.


Common problems

Symptom Cause and fix
Tasks stay pending, nothing in the log Broadcast id of the task is not in receive.broadcastIds, or the task has none and includeWithoutBroadcastId is off. Processing paused? Engine running (dashboard, Task Scheduler)?
Tasks are printed, but only after a minute or two Tasks without broadcast id: VeloxFactory sends no event for them, only the poll finds them. Give them a broadcast id. Otherwise the WebSocket is not subscribed: check the WebSocket tile and Test connection (host, port, scheme, app key, firewall). A token without report-print-task:read fails at the channel authorization.
Prints from the window, fails from the scheduled task with PrinterNotFound Printer only connected for your user profile. Install it machine-wide (Printers and printing).
Network printer fails from the scheduled task Task set up without stored password, or a local account against a domain print server. Use a domain account and set up the task again.
Error [Timeout] after 120 s Printer opens a dialog (PDF printers, OneNote, fax), or the driver hangs. Check the hint on the Printers page.
Only one copy instead of n Driver ignores the copy count. Set Copies to One job per copy for this printer.
Output shifted, cut off or too small Check scaling (Actual size for labels), paper size of the driver and auto rotate. The frame of the test page shows margins and scaling.
Very thin or missing lines Lines with width 0 in the report. Set lineWidth in the JRXML.
Printed, but pending in VeloxFactory Confirmation in the outbox (Queue tile to confirm, outbox.csv). The column last error names the reason. The task is not printed again, the confirmation follows as soon as the API answers.
Task shows error Print state unknown after service restart The service ended while the task was printing. Check the printer; if nothing came out, use Print again.
Many 429 / event 2002 Several services or scripts behind one IP share the limit. Raise API_RATE_LIMIT_PER_MINUTE, use Hybrid instead of short polling intervals.
Scheduled task shows result 0x1 / 0x3 Exit code 1 configuration invalid, 3 token rejected. Start the window or --validate-config.
Window cannot save settings No write access to the data folder. Use Restart as administrator.
update.ps1 refuses to update Local changes in app\, or a window of the Print Service is still open under another user. Close it and run the update again.

Revision #2
Created 2026-09-25 19:52:19 UTC by Benjamin Fischer
Updated 2026-09-25 19:56:23 UTC by Benjamin Fischer