Added a Dockerfile.
Added Amazon S3 bucket name as a VirtualHost (server block).
Added a replacement for GNU getline() to dynamically expand line buffer while maintaining real-time output.
--daemonize command line option to run GoAccess as daemon.
Added several improvements to the HTML report on small-screen devices.
Added option to the HTML report to auto-hide tables on small-screen devices.
--process-and-exit command line option to parse log and exit.
Added several feed readers to the list of browsers.
"-" single dash per convention to read from the standard input.
Added support for MaxMind GeoIP2.
Added the ability to read and follow from a pipe such as
"tail -f access.log | goaccess -"
Added the ability to specify multiple logs as input sources, e.g.:
"goaccess access.log access.log.1" while maintaining real-time output.
Added time unit (seconds) to the processed time label in the HTML/terminal output.
Added visitors' percent column to the terminal dashboard.
Changed D3 charts to dim Y-axis on mouseover.
Changed D3 charts to reflect HTML column sort.
Changed D3 charts to render only if within the viewport. This improves the overall real-time HTML performance.
Changed HTML report tables to render only if within the viewport.
Changed percentage calculation to be based on the total within each panel.
Ensure start/end dates are updated real-time in the HTML output.
"window.location.hostname" is used as the default WS server host. In most cases, this should avoid the need for specifying
" Simply using
" should suffice.
Fixed issue on HTML report to avoid outputting scientific notation for all byte sizes.
Fixed integer overflow when calculating bar graph length on terminal output.
Fixed issue where global config file would override command line arguments.
Fixed issue where it wouldn't allow loading from disk without specifying a file when executed from the cron.
Fixed issue where parser couldn't read some X-Forwarded-For (XFF) formats. Note that this breaks compatibility with the original implementation of parsing XFF, but at the same time it gives much more flexibility on different formats.
Fixed issue where specifying fifo-in/out wouldn't allow HTML real-time output.
Fixed issue where the wrong number of parsed lines upon erroring out was displayed.
Fixed issue where the WebSocket server prevented to establish a connection with a client due to invalid UTF-8 sequences.
Fixed percent issue when calculating visitors field.
Updated the list of crawlers.
Added data metric's
"unique" count on each panel to the JSON/HTML outputs.
Changed D3 bar charts to use .rangeBands and avoid extra outer padding.
Fixed mouseover offset position issue on D3 bar charts.
Fixed possible heap overflow when an invalid status code was parsed and processed. This also ensures that only valid HTTP status codes are parsed >=100 or <= 599.
Fixed sluggish D3 chart re-rendering by changing how x-axis labels are displayed in the HTML report.
Added a new layout to the HTML report and additional settings and changes.
--crawlers-only command line option to display crawlers/bots only.
--fifo-out command line options to set websocket FIFO reader/writer.
--no-html-last-updated command line option.
--num-tests command line option.
--html-prefs command line option to to set default preferences for the HTML report.
"Amazon S3" Log Format to the list of predefined options.
"Android 7.1 Nougat" to the list of OSs.
"Android Marshmallow 6.0.1" to the list of OSs.
"Android Nougat 7.0" to the list of OSs.
"Feed Wrangler" to the list of feeds.
"Go-http-client" to the list of browsers.
"MicroMessenger" (WeChat) to the list of browsers.
"SemrushBot" to the list of crawlers.
"Remote User" panel to capture HTTP authentication requests. Use
%e within the log-format variable to enable this panel.
Added tebibyte unit to the byte to string function converter.
Added the ability to parse reverse proxy logs that have multiple IPs. This adds the ability to parse the
"X-Forwarded-For" field in a reverse proxy setup.
Added the ability to show which token didn't match log/date/time pattern. This also ensures that in the absence of data, its output is not treated as error but instead it produces an empty report.
Added the ability to specify a WebSocket protocol (ws|wss) through
Added the request query string to the W3C format.
Added TLS/SSL support to the HTML real-time report.
Changed browser classification for Google Cloud Clients.
"Darwin" OS was reported to display AppName instead.
Changed default W3C log format to use the URL path instead of full request.
Changed HTML default number of items on each table to 7.
Changed request parser to allow empty query strings.
Changed default HTML output theme to darkBlue.
Ensure every version of iOS is broken down under the OS panel.
Ensure latest JSON data is fast-forwarded when connection is opened. GoAccess now sends the latest JSON data to the client as soon as the WebSocket connection is opened.
Ensure localStorage is supported and enabled in the HTML report
Ensure unknown coutries/continents are listed.
Fixed D3 chart width overflow issue on Edge.
Fixed integer to string key conversion for unique visitors. This fixes the issue where resulting keys would collide with existing keys and thus not keeping the right visitors count on certain panels.
Fixed memory leak when unable to URL decode
Fixed memory leak when unable to URL decode
Fixed month name abbreviation on app.js.
Fixed percentage integer overflow with large numbers on 32bits platforms.
Fixed percent calculation due to integer division rounding to zero.
Fixed possible code injection when outputting an HTML report.
Fixed segfault when using options -H or -M without an argument.
Removed timestamp from the HTML report title tag.
Added minor changes to the HTML report stylesheet.
Added the ability to specify the WebSocket port within
Added the proper byte swap functions used by Sun Solaris.
Added the proper default
--http-method/protocol values on the config file.
Changed bar transition to scale delay dynamically to the length of the dataset.
Fixed build issue on platforms lacking of open_memstream() by refactoring the JSON module to use its own memory buffer.
Fixed issue where the server wouldn't send cached buffer to slow clients.
Fixed OS X build check of ncursesw.
Implemented a throttle mechanism for slow clients to avoid caching too much data on the server-side.
Removed flickering on D3 line and bar chart redraw.
Added Android version number along with the codename when using
Added some missing headers and function checks to configure.ac.
Fixed a regression where it wouldn't allow abbreviated date and time formats such as
Fixed build issues on systems running GLIBC older than 2.9, such as RHEL <= 5.
Fixed issue where it wouldn't send the whole buffer to a socket causing the real-time-html WebSocket server to progressively consume a lot more memory.
Fixed memory leak when using getline and follow mode enabled.
Fixed some buffer initialization issues on read_line() and perform_tail_follow().
Fixed uint types in sha1 files.
--enable-panel=<PANEL> command line option to display the given module.
--json-pretty-print command line option to output pretty json.
--log-format=<format> command-line shortcuts for standard log formats.
--origin command line option to match the origin WebSocket header.
--output=<file.[html|csv|json]> as a shortcut to
Added a complete real-time functionality to the HTML output.
Added an option to set the max number of items to show per panel.
Added D3 Visualziations to the HTML dashboard.
Added metadata metrics to the each of the panels (JSON output)
Added option to specify time distribution specificity.
Added the ability to download a JSON file from the HTML report.
Added the ability to output multiple formats on a single log parse.
Added the ability to set the date specificity in hours.
Added the ability to sort all HTML tables on all panels.
Added the ability to specify a custom CSS and JS file to the HTML report.
Added user-agents to the JSON output per each host.
"Vivaldi" to the list of browsers.
Bootstrapify the HTML dashboard.
Changed configure.ac to use LDFLAGS instead of CFLAGS where applicable.
Changed default terminal color scheme to 256 Monokai if terminal supports 256 colors.
Changed GoAccess license to The MIT License (MIT)
Changed the visitors panel to display its dates continuously instead of top.
Default to 256 Monokai color scheme if terminal supports 256 colors.
Default to display HTTP method/protocol (if applicable).
Display the children's Max. T.S. as the parent's top Max. T.S.
Ensure the parent's Avg. T.S. displays parent's Cum. T.S. over parent's Hits.
Fixed color issue when switching from the color scheme dialog.
Fixed cross platform build issue when ncurses is built with and without termlib=tinfo.
Fixed curses header window issue where it wouldn't clear out on small window sizes.
Fixed issue where tail mode wouldn't parse full lines using getline().
Fixed minor background color issue when using ncurses 6.
Fixed possible division by zero when calculating percentage.
Fixed singly link list node removal.
Fixed still reachable memory leak on GeoIP cleanup (geoip legacy >= 1.4.7).
Fixed various Valgrind's still reachable memory leaks.
Added a more complete list of static extensions to the config file.
"Android 6.0 Marshmallow" to the list of OSs.
--no-tab-scroll command line option to disable scroll through panels on TAB.
Added the first and last log dates to the overall statistics panel.
Ensure GoAccess links correctly against libtinfo.
Ensure static content is case-insensitive verified.
Fixed bandwidth overflow issue (numbers > 2GB on non-x86_64 arch).
Fixed broken HTML layout when html-method/protocol is missing in config file.
Refactored parsing and display of available modules/panels.
"Squid native" log format to the config file.
Fixed integer overflow when getting total bandwidth using the on-disk storage.
Fixed issue where a timestamp was stored as date under the visitors panel.
Fixed issue where config dialog fields were not cleared out on select.
Fixed issue where
"Virtual Hosts" menu item wasn't shown in the HTML sidebar.
--dcf command line option to view the default config file path.
--ignore-status the ability to ignore parsing status codes.
"Darwin" to the list of OSs.
Fixed segfault when appending data to a log (follow) without virtualhosts.
Added major performance improvements to the default storage when parsing and storing data (~
%44 less memory, ~37% faster).
Added the ability to parse virtual hosts and a new panel to display metrics per virtual host.
Added the ability to parse HTTP/2 requests.
Added the ability to use GNU getline() to parse full line requests.
Added the ability to output debug info if a log file is specified, even without
Added OS X
Added WebDav HTTP methods and HTTP status from RFC 2518 and RFC 3253.
Fixed detection of some Googlebots.
Fixed issue where time served metrics were not shown when loading persisted data.
Fixed linker error on OSX: ld: library not found for -lrt.
Fixed percentage on the HTML output when excluding IPs.
Removed GLib dependency and refactored storage functionality. By removing this dependency, GoAccess is able to store data in a more efficient manner, for instance, it avoids storing integer data as void* (generic typing), thus greatly improving memory consumption for integers.
--all-static-files command line option to parse static files containing a query string.
--invalid-requests command line option to log invalid requests to a file.
Added additional overall metric - total valid requests.
"specifier to move forward through a log string until a non-space char is found.
Added the ability to parse native Squid access.log format.
Fixed a few issues in the configuration script.
Fixed inability to parse color due to a missing POSIX extension.
"ERR:Invalid bg/fg color pairs"
--no-column-names command line option to disable column name metrics.
Added a default color palette (Monokai) to the config file.
Added AWS Elastic Load Balancing to the list of predefined log/date/time formats.
Added CloudFlare status codes.
Added column headers for every enabled metric on each panel.
Added cumulative time served metric.
"DragonFly" BSD to the list of OSs.
Added maximum time served metric (slowest running requests).
"Slackbot" to the list of crawlers/browsers.
Added the ability to parse the query string specifier
"from a log file.
Added the ability to process logs incrementally.
Added the ability to set custom colors on the terminal output.
Disabled REFERRERS by default.
Ensure bandwidth metric is displayed only if
%b specifier is parsed.
Fixed issue where the
--sort-panel option wouldn't sort certain panels.
Fixed several compiler warnings.
Set predefined static files when no config file is used.
"Windows 10" user agent from 6.4 (wrong) to 10.0.(actual)
Added ability to fully parse browsers that contain spaces within a token.
Added multiple user agents to the list of browsers.
Added the ability to handle time served in milliseconds as a decimal number `
Added the ability to parse a timestamp in microseconds.
Added the ability to parse Google Cloud Storage access logs.
Added the ability to set a custom title and header in the HTML report.
"as timestamp log-format specifier.
Ensure agents" hash table is destroyed upon exiting the program.
"Game Systems" are processed correctly.
Ensure visitors panel header is updated depending if crawlers are parsed or not.
Fixed issue where the date value was set as time value in the config dialog.
Fixed memory leak in the hits metrics when using the in-memory storage (GLib).
--hl-header command line option to highlight active panel.
"Applebot" to the list of web crawlers.
"Microsoft Edge" to the list of browsers.
Added additional Nginx-specific status codes.
Ensure dump_struct is used only if using __GLIBC__.
Ensure goaccess image has an alt attribute on the HTML output for valid HTML5.
Ensure the config file path is displayed when something goes wrong (FATAL).
Ensure there is a character indicator to see which panel is active.
Fixed Cygwin compile issue attempting to use -rdynamic.
Fixed issue where a single IP did not get excluded after an IP range.
Fixed issue where requests showed up in the wrong view even when
--no-query-string was used.
Fixed issue where some browsers were not recognized or marked as
Fixed memory leak when excluding an IP range.
Fixed overflows on sort comparison functions.
Fixed segfault when using on-disk storage and loading persisted data with -a.
Removed keyphrases menu item from HTML output.
Split iOS devices from Mac OS X.
--geoip-database command line option for GeoIP Country/City IPv6.
"Windows 10 (v6.4)" to the real windows user agents.
Added ability to double decode an HTTP referer and agent.
Added ability to sort views through the command line on initial load.
Added additional data values to the backtrace report.
Added additional graph to represent the visitors metric on the HTML output.
Added AM_PROG_CC_C_O to configure.ac
"Android Lollipop" to the list of operating systems.
"average time served" metric to all panels.
"bandwidth" metric to all panels.
Added command line option to disable summary metrics on the CSV output.
Added numeric formatting to the HTML output to improve readability.
Added request method specifier to the default W3C log format.
Added the ability to ignore parsing and displaying given panel(s).
Added the ability to ignore referer sites from being counted. A good case scenario is to ignore own domains. i.e., owndomain.tld. This also allows ignoring hosts using wildcards. For instance, *.mydomain.tld or www.mydomain.* or www?.mydomain.tld
Added time/hour distribution module. e.g., 00-23.
"visitors" metrics to all panels.
Changed AC_PREREQ macro version so it builds on old versions of autoconf.
Changed GEOIP database load to GEOIP_MEMORY_CACHE for faster lookups.
Changed maximum number of choices to display per panel to 366 fron 300.
Ensure config file is read from home dir if unable to open it from
Fixed array overflows when exceeding MAX_* limits on command line options.
Fixed a SEGFAULT where sscanf could not handle special chars within the referer.
Fixed character encoding on geolocation output (ISO-8859 to UTF8).
Fixed issue on wild cards containing
"?" at the end of the string.
Fixed issue where a
"Nothing valid to process" error was triggered when the number of invalid hits was equal to the number of valid hits.
Fixed issue where outputting to a file left a zero-byte file in pwd.
Improved parsing of operating systems.
Refactored log parser so it allows with ease the addition of new modules. This also attempts to decouple the core functionality from the rendering functions. It also gives the flexibility to add children metrics to root metrics for any module. e.g., Request A was visited by IP1, IP2, IP3, etc.
Restyled HTML output.
Fixed SEGFAULT when parsing a malformed request that doesn't have HTTP status.
--444-as-404 command line option to handle nginx non-standard status code 444 as 404.
--4xx-to-unique-count command line option to count client errors (4xx) to the unique visitors count. Now by default it omits client errors (4xx) from being added to the unique visitors count as they are probably not welcomed visitors. 4xx errors are always counted in panels other than visitors, OS & browsers.
Added and updated operating systems, and browsers.
Added excluded IP hits count to the general statistics panel on all reports.
Added HTTP nonstandard code
"444" to the status code list.
Fixed compile error due to missing include <sys/types.h> for type off_t (gcc 4.1).
Fixed issue when excluding IPv4/v6 ranges.
Removed request status field restriction. This allows parsing logs that contain only a valid date, IPv4/6 and host.
Fixed SEGFAULT when parsing a CLF log format and using
Fixed parsing conflict between some Opera browsers and Chrome.
Fixed parsing of several feed readers that are Firefox/Safari-based.
Fixed Steam detection.
Added Huawei to the browser's list and removed it from the OS's list.
--version command line option.
--ignore-crawlers command line option to ignore crawlers.
Added ability to parse dates containing whitespaces in between, e.g.,
"Jul 15 20:13:59" (syslog format).
Added a variety of browsers, game systems, feed readers, and podcasts.
Added missing up/down arrows to the help section.
Added the ability to ignore multiple IPv4/v6 and IP ranges.
Added the PATCH method according to RFC 5789.
Fixed GeoLocation percent issue for the JSON, CSV and HTML outputs.
Fixed memory leak when excluding one or multiple IPs.
Added ability to add/remove static files by extension through the config file.
Added ability to print backtrace on segmentation fault.
Escaped JSON strings correctly according to [RFC4627].
Fixed encoding issue when extracting keyphrases for some HTTP referers.
Fixed issue where HTML bar graphs were not shown due to numeric locale.
Fixed issue with URIs containing
"\r?\n" thus breaking the corresponding output.
Make sure request string is URL decoded on all outputs.
Added APT-HTTP to the list of browsers.
Added data persistence and ability to load data from disk.
Added IE11 to the list of browsers.
Added IEMobile to the list of browsers.
Added multiple command line options.
Added Nagios check_http to the list of browsers.
Added parsing progress metrics - total requests / requests per second.
Added the ability to parse a GeoLiteCity.dat to get the city given an IPv4.
Changed the way the configuration file is parsed. This will parse all configuration options under ~/.goaccessrc or the specified config file and will feed getopt_long with the extracted key/value pairs. This also allows the ability to have comments on the config file which won't be overwritten.
Ensure autoconf determines the location of ncurses headers.
Fixed issue where geo_location_data was NULL.
Fixed issue where GoAccess did not run without a tty allocated to it.
Fixed potential memory leak on
Fixed Solaris build errors.
Implemented an on-memory hash database using Tokyo Cabinet. This implementation allows GoAccess not to rely on GLib's hash table if one is needed.
Implemented large file support using an on-disk B+ Tree database. This implementation allows GoAccess not to hold everything in memory but instead it uses an on-disk B+ Tree database.
Trimmed leading and trailing whitespaces from keyphrases module.
--no-color command line option to turn off color output.
--real-os command line option to get real OS names, e.g.,
"Android, Windows, Mac".
Added ability to log debug messages to a file.
Added ability to parse tab-separated log format strings.
Added ability to support terminals without colors.
Added command line option to append HTTP method to request.
Added command line option to append HTTP protocol to request.
Added long options to command-line.
"Win 9x 4.90" (Windows Me) user-agent.
Added missing Windows RT user-agent.
Ensure mouse click does not reset expanded module if it is the same.
Fixed Amazon CloudFront tab-separated log format.
"FreeBSD style" ncursesw built into system.
Fixed HTML report issue where data cell would not wrap.
Fixed issue when isatty() could not find a valid file descriptor.
Fixed SymbianOS user-agent and retrieve its version.
Added a command line option to ignore request query strings.
Added additional compiler flags & fixed several warnings.
Added additional static file extensions.
Added country per IP to HOSTS module (HTML & JSON).
Added DEBUG mode to Makefile & -O2 to default release.
Added GEOLOCATION report to all outputs - includes continents/countries.
Added IP resolver to HTML and JSON output.
Added module numbers to each module header.
Added the ability to output JSON and CSV.
Added Windows NT 6.3 (Win 8.1) to the list.
Fixed buffer overflow issue with realpath.
New HTML report - HTML5 + CSS styles.
Properly split request line into the three request modules.
Added active module indication by name.
Added additional crawlers to the list.
Added custom configuration file option.
Added human-readable string when unable to open log.
Added missing include when compiling on OSX 10.6.
Added optional mouse support to the main dashboard.
Added the ability to select active module by number (keys).
Added the rest of HTTP methods according to RFC2616.
Changed referring site sscanf format to process multiple URLs.
Changed the default color scheme to monochrome.
Fixed issue where
%T was not processing floating-point numbers.
Fixed percentage issue for browsers and os modules.
Fixed SIGSEGV when reading from stdin to stdout.
Improved performance when expanding a module.
Reduced memory consumption by decreasing number of dns threads.
Removed ^UP/^DOWN due to a key mapping conflict.
Added a bunch of minor fixes and changes.
Added and updated list of browsers and operating systems.
Added a predefined log format/date for the Amazon CloudFront (Download Distribution).
Added parsing/processing indicators.
Added the ability to independently sort each module.
Added the ability to search across the whole dashboard with the option to use regular expressions.
Config window now accepts [ENTER] to continue or F10.
Fixed issue where Opera +15 was identified as Chrome.
Implemented the ability to parse the time taken to serve the request, in microseconds and seconds.
Improved memory usage and better performance in general.
Moved away from the original pop-up UI to a new expandable dashboard allowing data to be processed in real-time.
Sanitized HTML output with html entities for special chars.
Updated the hosts module so it shows the reverse DNS as a sub node.
Added ability to output a full stats report to a file.
Added a key shortcut to scroll top/bottom.
Added a new include sys/socket.h - BSD
Added support for IPv6
Added the ability to parse a custom format string.
Fixed google cache key-phrases.
Fixed issue on empty Google query strings.
Fixed issue on Opera agents where version was not recognized correctly.
Fixed other minor fixes and changes.
Added UTF-8 support. Now it should handle properly wide-character/UTF-8. Run ./configure
Fixed a minor bug when adding monthly totals on visitors subwin.
Removed -lrt since GoAccess does not link to librt. (OS X doesn't include librt)
Added more flexibility when resizing the terminal. Should work fine with the standard 80x24.
Added the ability to pass a flag to ./configure so GeoIP can be enabled if needed.
Implemented a pipeline from stdin, so the input doesn't have to be only a file.
Added graphs to the unique_visitors subwin.
Implemented bandwidth per day, and host.
Implemented list of agents for specific hosts.
Rewrote hash tables iterative code to avoid the use of GHashTableIter, this way it works with all GLib > 2.0.0.
Various bug fixes and code cleanups (mainly in the subwin modules).
Changed tarball's filename.
Fixed a request size parsing issue. Due to malformed syntax on the HTTP protocol, bandwidth was reset to 0. Ex.
"HEAD /" 400 20392
Fixed a segfault when goaccess was executed without any options but with an additional unknown argument.
Fixed an agent parsing issue. As a result, operating systems were not properly counted.
Added a counter for total requests since initial parse was implemented
Added a more detailed and comprehensive browser and os report
Added bandwidth details for requested files
Added percentage details on modules 2, 3, 4, 5, 10, 11
Fixed a potential segmentation fault when resizing main window
Fixed a segmentation fault on pop-up window search if haystack was null
Fixed invalid entries when parsing status codes
Implemented a real support for LFS - Handles files larger than 2 GiB on 32-bit systems
Implemented support for
"vhost_combined" log format
Changed position of data/graphs depending on # of hits
Added a keyphrases report coming from Google search engine. This includes, raw, cache, and translation queries.
Fixed a memory leak when invalid entries were parsed
Fixed a potential buffer overflow.
Implemented real-time statistics (RTS). Data will be appended as the log file grows. Equivalent to
"tail -f" on Unix systems
Implemented screen resize functionality
Simpliflied creation of the
"unique visitors" hash-key.
Various small speed increases & code cleanup
Fixed a segmentation fault when parsing logs with unusual request type. Ex.
"GET HTTP/1.1 HTTP/1.1"
Added an enhanced error handling
Added an extra macro on configure.ac to check against GHashTableIter. ./configure might not check for glib 2.16 that introduced
Added Glibc LFS
Cleaned up code a little bit
Fixed a segmentation fault when displaying the help text on x86_64.
Fixed assignments in conditions. In case the assignment is actually intended put extra parenthesis around it. This will shut GCC (and others) up.
Fixed casts associated with
Fixed comparison between signed and unsigned integer types.
Fixed function declarations.
Fixed two format strings. (If the error was ever triggered, it'd most likely lead to a segfault)