Skip to Content
Logging

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 plain

Plain is the default.

JSON-lines logs

JSON-lines logs are intended for machines:

qaws --log-format jsonl --log-file qaws.log

Each log entry is one JSON object on one line.

Access logs

Access logs are enabled by default:

qaws --access-log

Disable them:

qaws --no-access-log

Access log fields include:

FieldMeaning
remoteRemote address.
methodHTTP method.
targetRaw request target.
statusResponse status.
bytesResponse body bytes.
duration_usRequest duration in microseconds.
user_agentUser-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.log

Daemon log file:

qaws -d --pid-file /tmp/qaws.pid --log-file /tmp/qaws.log

If 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 qaws

Avoid qaws daemon mode in Docker. Let Docker supervise the foreground process.

qaws docs. Built for static hosting.