From f7ed2c69f3840f54bd3e54973821b308a998b063 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 25 Mar 2019 09:19:01 +0200 Subject: Add: initial commit --- README | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 README (limited to 'README') diff --git a/README b/README new file mode 100644 index 0000000..c92c83d --- /dev/null +++ b/README @@ -0,0 +1,64 @@ +README for debug logging +======================== + +Log files can be used for at least two purposes: for the program user +(or sysadmin) to have a rough idea of what is happening and for the +programmer to get a very detailed idea of what is happening, in order +to find and fix problems. + +For the debugging programmer, especially, it would be helpful if +the log file was in a machine parseable format. `debuglog` is a +little helper class to make such log files. They're not intended +to be useful for non-programmers. + +Some assumptions: + +* It is not necessary to log everything during a program run. Instead, + saving the last N log messages and writing those when the software + crashes is enough. +* Log levels are not fine grained enough. It's better to have a + machine parseable format that lends itself to more detailed filtering. + Therefore, save everything and filter afterwards. + +`debuglog` consists of two parts: + +1. A Python module, `debuglog`, with a class that collects structured + log messages, and writes them (when requested) to a file as JSON. +2. A script, `debuglogtool`, that reads the JSON file and filters it + in some ways. + +The structured log messages are key/value pairs. For example: + + dlog = debuglog.DebugLog() + ... + dlog.log(msg='Opening input file', filename=filename, cwd=os.getcwd()) + +The `log` method gets any number of keyword arguments. These are saved +as a JSON record, with all values converted to strings. + +The JSON log file can, of course, be filtered by any code that understands +JSON, if what `debuglogtool` provides is not sufficiently powerful. + +Example: + + debuglogtool -e msg='Opening input file' -e 'filename~/\.JPG$/' *.debuglog + +The above would output all JSON records that have a field called `msg` +with a value that is exactly the string "Opening input file", and +additionally have a field called `filename` which matches the regular +expression given. All such records are written out entirely, as a JSON +list. If there are no matches, nothing is output, and the exit code is +non-zero. + +A single expression can use the following operators: + +* `=` for exact string equality. +* `!=` for string inequality. +* `~` for regexp matching (regexp to be surrounded by slashes). +* `!~` for regexp NOT matching. + +Regular expressions are PCRE. + +Each expression is given with the `-e` option (`--expression`). +All expressions must match. There is no way to express full Boolean +logic, at this time. -- cgit v1.2.1