$ goaccess --version | head -1
GoAccess - 1.10.2.
VCOMBINED and VCOMMON formats both start with %v:%^ . this has two problems:
-
they require a port number, so VCOMMON is incompatible with Apache’s suggested format for logging with virtual hosts (see config below, and see also this blog post). for example:
<VirtualHost *:80>
ServerName test
CustomLog /var/log/httpd/goaccess.log "%v %h %l %u %t \"%r\" %>s %b"
</VirtualHost>
$ echo 'test ::1 - - [25/Jul/2026:17:38:53 +0800] "GET / HTTP/1.1" 200 0' | goaccess -o out.html --log-format=VCOMMON
==645333== GoAccess - version 1.10.2 - Jan 1 1980 00:00:00
==645333== Config file: /nix/store/8k8lgz82gjbdfmb6sal1rj6666h95ggv-goaccess-1.10.2/etc/goaccess/goaccess.conf
==645333== https://goaccess.io - <[email protected]>
==645333== Released under the MIT License.
==645333==
==645333== FILE: -
==645333== Parsed 1 lines producing the following errors:
==645333==
==645333== Token '-' doesn't match specifier '%h'
==645333==
==645333== Format Errors - Verify your log/date/time format
==645333== Use --invalid-requests option to store such lines in a file.
-
they seem to move from %v to %^ after the first colon, which will parse the virtual host incorrectly if it contains an IPv6 address. this can happen in nginx with $host. for example:
$ echo '[2001:db8::1]:80 2001:db8::2 - - [25/Jul/2026:16:29:40 +0800] "GET / HTTP/1.1" 200 0 "-" "curl/8.20.0"' | goaccess -o out.html --log-format=VCOMBINED
to me, it would make sense if VCOMBINED and VCOMMON started with %v , and we just included the port number (if any) in the virtual host. that would also play nicer with nginx’s new $is_request_port and $request_port variables.
VCOMBINED and VCOMMON formats both start with
%v:%^. this has two problems:they require a port number, so VCOMMON is incompatible with Apache’s suggested format for logging with virtual hosts (see config below, and see also this blog post). for example:
$ echo 'test ::1 - - [25/Jul/2026:17:38:53 +0800] "GET / HTTP/1.1" 200 0' | goaccess -o out.html --log-format=VCOMMONthey seem to move from
%vto%^after the first colon, which will parse the virtual host incorrectly if it contains an IPv6 address. this can happen in nginx with $host. for example:$ echo '[2001:db8::1]:80 2001:db8::2 - - [25/Jul/2026:16:29:40 +0800] "GET / HTTP/1.1" 200 0 "-" "curl/8.20.0"' | goaccess -o out.html --log-format=VCOMBINEDto me, it would make sense if VCOMBINED and VCOMMON started with
%v, and we just included the port number (if any) in the virtual host. that would also play nicer with nginx’s new $is_request_port and $request_port variables.