Written as a CSV, because a log is tabular and is read by sorting and
filtering it. Each entry's params field is a nested structure with up to
14 members; the ones that are simple values become columns, and the few that
are themselves nested (contributors, urls, params_node) are dropped,
because a CSV cell cannot hold them. Every entry's date and action are
always kept, so the record of what happened and when is complete.
