#!/bin/sh # Tail Caddy's JSON access log, transform each entry into Apache CLF # Combined with the virtual host glued to the request URI, and feed # the stream straight into goaccess via stdin. Result: every line in # the Requests panel renders as `host.example.com/path`. set -eu ACCESS_LOG="/srv/logs/access.log" JQ_FILTER=' "\(.request.remote_ip // "-") - - " + "[\((.ts // 0) | gmtime | strftime("%d/%b/%Y:%H:%M:%S +0000"))] " + "\"\(.request.method) \(.request.host)\(.request.uri) \(.request.proto)\" " + "\(.status) \(.size) " + "\"\(.request.headers.Referer[0]? // "-")\" " + "\"\(.request.headers["User-Agent"][0]? // "-")\"" ' tail -F -n +1 "$ACCESS_LOG" \ | jq --unbuffered -rc "$JQ_FILTER" \ | exec goaccess - "$@"