From: Jeff Hostetler <jeffh...@microsoft.com> This RFC patch series adds structured logging to git. The motivation, background, and limitations of this feature are described at the beginning of the design document in the first commit. The design document also contains a section comparing this feature with the existing GIT_TRACE feature. So I won't go into great detail here in the cover letter.
My primary focus in this RFC is to reach agreement on the structured logging facility. This includes the basic approach and the various logging fields and timers. This patch series also includes several example usage commits, such as adding timers around do_{read,write}_index, that demonstrate the capabilities of the structured logging facility. I only added a few examples for things that I think we'll want long-term. I did not attempt to instrument everything. This patch series requires V11 of my json-writer patch series. Jeff Hostetler (25): structured-logging: design document structured-logging: add STRUCTURED_LOGGING=1 to Makefile structured-logging: add structured logging framework structured-logging: add session-id to log events structured-logging: set sub_command field for branch command structured-logging: set sub_command field for checkout command structured-logging: t0420 basic tests structured-logging: add detail-event facility structured-logging: add detail-event for lazy_init_name_hash structured-logging: add timer facility structured-logging: add timer around do_read_index structured-logging: add timer around do_write_index structured-logging: add timer around wt-status functions structured-logging: add timer around preload_index structured-logging: t0420 tests for timers structured-logging: add aux-data facility structured-logging: add aux-data for index size structured-logging: add aux-data for size of sparse-checkout file structured-logging: t0420 tests for aux-data structured-logging: add structured logging to remote-curl structured-logging: add detail-events for child processes structured-logging: add child process classification structured-logging: t0420 tests for child process detail events structured-logging: t0420 tests for interacitve child_summary structured-logging: add config data facility Documentation/config.txt | 33 + Documentation/git.txt | 6 + Documentation/technical/structured-logging.txt | 816 ++++++++++++++++ Makefile | 8 + builtin/branch.c | 8 + builtin/checkout.c | 7 + compat/mingw.h | 7 + config.c | 3 + editor.c | 1 + git-compat-util.h | 9 + git.c | 10 +- name-hash.c | 26 + pager.c | 1 + preload-index.c | 6 + read-cache.c | 14 + remote-curl.c | 16 +- run-command.c | 14 +- run-command.h | 2 + structured-logging.c | 1219 ++++++++++++++++++++++++ structured-logging.h | 179 ++++ sub-process.c | 1 + t/t0001-init.sh | 1 + t/t0420-structured-logging.sh | 293 ++++++ t/t0420/parse_json.perl | 52 + t/test-lib.sh | 1 + unpack-trees.c | 4 +- usage.c | 4 + wt-status.c | 20 + 28 files changed, 2757 insertions(+), 4 deletions(-) create mode 100644 Documentation/technical/structured-logging.txt create mode 100644 structured-logging.c create mode 100644 structured-logging.h create mode 100755 t/t0420-structured-logging.sh create mode 100644 t/t0420/parse_json.perl -- 2.9.3