Categories in the logging system currently work as follows:
- You can set a global log level (defaulting to debug), totraceto enable trace logs in all (enabled) categories (-loglevel=trace), or toinfoto disable debug logs even enabled categories (-debug=all -loglevel=infowill still leave debugging disabled)
- You can override the global log level on a per-category basis, either making it more verbose (override info to debug or trace, or override debug to trace), or to make it less verbose (override a global default of debug or trace to a category specific level of info or debug), eg -loglevel=walletdb:trace -loglevel=net:info
- The log levels are only relevant for “enabled” categories (eg, you have to specify -debug=walletdb -loglevel=walletdb:traceto enable wallet db tracing)
- Enabling/disabling categories can be done at startup via the -debugoption, or at runtime via theloggingRPC
- Setting the log level is currently only possible at startup via the (currently hidden) -logleveloption
Is this behaviour worth preserving, or can we simplify it? I think it would be simpler and almost as powerful if we set things up as:
- Every category has a log level, that can be either info(default),debug, ortrace(trace gives you everything, debug gives you everything butLogTrace(), and info skips bothLogDebug()andLogTrace())
- We add a new -traceconfig option that sets a category’s log level to trace, analogously to-debug(so you would just specify-trace=walletdbfor wallet db tracing.
- We add an optional third argument to the loggingrpc that accepts a list of categories to enable trace logging
- We support -debug=allor-trace=allto do all categories at once, and-debug=all -debugexclude=leveldbas usual to set all categories to debug but one left at info, or-trace=all -debug=walletdbto trace all categories but one left at debug (which offer similar behaviour to-debug=all -loglevel=debug -loglevel=leveldb:infoor-debug=all -loglevel=trace -loglevel=walletdb:debug)
(Looking for concept acks/feedback)