aboutsummaryrefslogtreecommitdiff
path: root/doc/developer-notes.md
diff options
context:
space:
mode:
authorAnthony Towns <aj@erisian.com.au>2023-08-22 13:23:38 +1000
committerAnthony Towns <aj@erisian.com.au>2023-12-20 15:59:48 +1000
commitf7ce5ac08c669ac763e275bb7c82dcfb2b1b6c33 (patch)
tree2bc830fec16764c0196930f3576081c7e3631590 /doc/developer-notes.md
parentfbd7642c8e5b70327e019382320f5ef0a651ecc5 (diff)
downloadbitcoin-f7ce5ac08c669ac763e275bb7c82dcfb2b1b6c33.tar.xz
logging: add LogError, LogWarning, LogInfo, LogDebug, LogTrace
These provide simple and clear ways to write the most common logging operations: LogInfo("msg"); LogDebug(BCLog::LogFlags::NET, "msg"); LogError("msg"); LogWarning("msg"); LogTrace(BCLog::LogFlags::NET, "msg"); For cases where the level cannot be hardcoded, LogPrintLevel(category, level, ...) remains available.
Diffstat (limited to 'doc/developer-notes.md')
-rw-r--r--doc/developer-notes.md45
1 files changed, 43 insertions, 2 deletions
diff --git a/doc/developer-notes.md b/doc/developer-notes.md
index 80353bcdd2..f94b96a312 100644
--- a/doc/developer-notes.md
+++ b/doc/developer-notes.md
@@ -723,6 +723,47 @@ General Bitcoin Core
- *Explanation*: If the test suite is to be updated for a change, this has to
be done first.
+Logging
+-------
+
+The macros `LogInfo`, `LogDebug`, `LogTrace`, `LogWarning` and `LogError` are available for
+logging messages. They should be used as follows:
+
+- `LogDebug(BCLog::CATEGORY, fmt, params...)` is what you want
+ most of the time, and it should be used for log messages that are
+ useful for debugging and can reasonably be enabled on a production
+ system (that has sufficient free storage space). They will be logged
+ if the program is started with `-debug=category` or `-debug=1`.
+ Note that `LogPrint(BCLog::CATEGORY, fmt, params...)` is a deprecated
+ alias for `LogDebug`.
+
+- `LogInfo(fmt, params...)` should only be used rarely, eg for startup
+ messages or for infrequent and important events such as a new block tip
+ being found or a new outbound connection being made. These log messages
+ are unconditional so care must be taken that they can't be used by an
+ attacker to fill up storage. Note that `LogPrintf(fmt, params...)` is
+ a deprecated alias for `LogInfo`.
+
+- `LogError(fmt, params...)` should be used in place of `LogInfo` for
+ severe problems that require the node (or a subsystem) to shut down
+ entirely (eg, insufficient storage space).
+
+- `LogWarning(fmt, params...)` should be used in place of `LogInfo` for
+ severe problems that the node admin should address, but are not
+ severe enough to warrant shutting down the node (eg, system time
+ appears to be wrong, unknown soft fork appears to have activated).
+
+- `LogTrace(BCLog::CATEGORY, fmt, params...) should be used in place of
+ `LogDebug` for log messages that would be unusable on a production
+ system, eg due to being too noisy in normal use, or too resource
+ intensive to process. These will be logged if the startup
+ options `-debug=category -loglevel=category:trace` or `-debug=1
+ -loglevel=trace` are selected.
+
+Note that the format strings and parameters of `LogDebug` and `LogTrace`
+are only evaluated if the logging category is enabled, so you must be
+careful to avoid side-effects in those expressions.
+
Wallet
-------
@@ -891,7 +932,7 @@ Strings and formatting
`wcstoll`, `wcstombs`, `wcstoul`, `wcstoull`, `wcstoumax`, `wcswidth`,
`wcsxfrm`, `wctob`, `wctomb`, `wctrans`, `wctype`, `wcwidth`, `wprintf`
-- For `strprintf`, `LogPrint`, `LogPrintf` formatting characters don't need size specifiers.
+- For `strprintf`, `LogInfo`, `LogDebug`, etc formatting characters don't need size specifiers.
- *Rationale*: Bitcoin Core uses tinyformat, which is type safe. Leave them out to avoid confusion.
@@ -903,7 +944,7 @@ Strings and formatting
- *Rationale*: Although this is guaranteed to be safe starting with C++11, `.data()` communicates the intent better.
- - Do not use it when passing strings to `tfm::format`, `strprintf`, `LogPrint[f]`.
+ - Do not use it when passing strings to `tfm::format`, `strprintf`, `LogInfo`, `LogDebug`, etc.
- *Rationale*: This is redundant. Tinyformat handles strings.