Logging
Status | Accepted |
|---|---|
Stakeholders | @Nikita Puzankov @Egor Ivkov |
Outcome |
|
Due date | Aug 7, 2020 |
Owner | @Nikita Puzankov |
Background
To make logging process consistent across Iroha applications logging process should be introduced and logging format should be defined.
Action items
Problem
Unstructured logs are hard to monitor, analyze and process automatically.
Logs should be printed to stdout and stderr.
Log-level (verbosity) should be changeable in runtime, example: system signal (e.g., SIGUSR1, SIGHUP) to reread configs(env variable) and change the log-level.
Solution
Log macros can log function arguments and result, using https://tools.ietf.org/html/rfc5424 or newer. Nowadays de facto standard for log is JSON.
LEVEL DATE_TIME function_name[start]: arguments
LEVEL DATE_TIME function_name[end]: resultExample:
DEBUG - 2020-08-04 08:09:40:759899847 - request[start]:
DEBUG - 2020-08-04 08:09:40:759961514 - self = Client { public_key: PublicKey { digest_function: "ed25519", payload: "[1E, 0, 33, 8A, D, 96, B, B4, 4D, 9E, 7F, 3A, C1, 3C, A, 5D, 89, BF,
31, 8A, F8, 76, E2, FD, 15, 50, EE, 28, C5, EE, 9E, 63]" }, torii_url: "127.0.0.1:45371" },Decisions
Use tracing as a logging facade.
Provide a `/configure` endpoint for changing the log-level at run-time. The request should be provided in terms of a JSON file.
Each function should be instrumented to provide vital (determined on a case-by-case basis) information.
Errors must be either handled, or logged as `warn` or `error` level messages.
Use tracing_bunyan_formatter to provide efficient machine readable logging. The destination is set at run-time and log rotation is the administrator's responsibility.
Fields and their values should be recorded directly, preferably (unless otherwise specified), using their names in the source code.
Logging that is done unconditionally upon entering/exiting a function is given the TRACE level.
Logging that is done upon completion of some or part of a function is given a DEBUG level or higher.
Concerns
Implementation of loggers could affect performance (tracing is one of the fastest)
Log rotation can become an issue.
Assumptions
We do not depend on any implementation, only on format
Risks
Format will be inefficient for automatic monitoring `[1;8]`
Logging will slow down performance `[4;7]`
Log messages format will not help in issues discovery `[2;8]`