Logging
Foreground qaws logs go to stderr by default. Daemon mode uses --log-file or
a derived runtime log path.
Plain logs
Plain logs are intended for humans:
2026-07-05T10:20:30Z access remote=127.0.0.1:50000 method=GET target="/" status=200 bytes=268 duration_us=500 user_agent="curl/8.7.1"Start with plain logs:
qaws --log-format plainPlain is the default.
JSON-lines logs
JSON-lines logs are intended for machines:
qaws --log-format jsonl --log-file qaws.logEach log entry is one JSON object on one line.
Access logs
Access logs are enabled by default:
qaws --access-logDisable them:
qaws --no-access-logAccess log fields include:
| Field | Meaning |
|---|---|
remote | Remote address. |
method | HTTP method. |
target | Raw request target. |
status | Response status. |
bytes | Response body bytes. |
duration_us | Request duration in microseconds. |
user_agent | User-Agent header value. |
Access logs are non-blocking. If the internal logger queue is full, qaws may drop access log entries and report the dropped count on shutdown. Event and error logs are preserved and flushed.
Log files
Foreground log file:
qaws --log-file ./qaws.logDaemon log file:
qaws -d --pid-file /tmp/qaws.pid --log-file /tmp/qaws.logIf no daemon log file is configured, qaws derives one next to the daemon PID identity.
Docker logs
In Docker, prefer container-managed logs:
docker run --rm -p 8080:80 ghcr.io/nulldoubt/qaws:0.2.7 --log-format jsonl
docker logs -f qawsAvoid qaws daemon mode in Docker. Let Docker supervise the foreground process.