2023-12-31 01:00:00 +01:00
|
|
|
// Copyright (c) 2018-2023 The Dash Core developers
|
2018-09-14 13:59:02 +02:00
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2018-04-02 00:30:17 +02:00
|
|
|
#ifndef BITCOIN_BATCHEDLOGGER_H
|
|
|
|
#define BITCOIN_BATCHEDLOGGER_H
|
2018-09-14 13:59:02 +02:00
|
|
|
|
2018-05-01 04:13:30 +02:00
|
|
|
#include <logging.h>
|
2018-09-14 13:59:02 +02:00
|
|
|
|
|
|
|
class CBatchedLogger
|
|
|
|
{
|
|
|
|
private:
|
2024-11-20 17:31:08 +01:00
|
|
|
bool m_accept;
|
|
|
|
BCLog::LogFlags m_category;
|
|
|
|
BCLog::Level m_level;
|
|
|
|
std::string m_logging_function;
|
Merge #19809: log: Prefix log messages with function name and source code location if -logsourcelocations is set
b4511e2e2ed1a6077ae6826a9ee6b7a311293d08 log: Prefix log messages with function name if -logsourcelocations is set (practicalswift)
Pull request description:
Prefix log messages with function name if `-logfunctionnames` is set.
Yes, exactly like `-logthreadnames` but for function names instead of thread names :)
This is a small developer ergonomics improvement: I've found this to be a cheap/simple way to correlate log output and originating function.
For me it beats the ordinary cycle of 1.) try to figure out a regexp matching the static part of the dynamic log message, 2.) `git grep -E 'Using .* MiB out of .* requested for signature cache'`, 3.) `mcedit filename.cpp` (`openemacs filename.cpp` works too!) and 4.) search for log message and scroll up to find the function name :)
Without any logging parameters:
```
$ src/bitcoind -regtest
2020-08-25T03:29:04Z Using RdRand as an additional entropy source
2020-08-25T03:29:04Z Using 16 MiB out of 32/2 requested for signature cache, able to store 524288 elements
2020-08-25T03:29:04Z Using 16 MiB out of 32/2 requested for script execution cache, able to store 524288 elements
2020-08-25T03:29:04Z Loaded best chain: hashBestChain=0fff88f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e22ff height=0 date=2011-02-02T23:16:42Z progress=1.000000
2020-08-25T03:29:04Z block tree size = 1
2020-08-25T03:29:04Z nBestHeight = 0
2020-08-25T03:29:04Z Imported mempool transactions from disk: 0 succeeded, 0 failed, 0 expired, 0 already there, 0 waiting for initial broadcast
2020-08-25T03:29:04Z 0 addresses found from DNS seeds
```
With `-logthreadnames` and `-logfunctionnames`:
```
$ src/bitcoind -regtest -logthreadnames -logfunctionnames
2020-08-25T03:29:04Z [init] [ReportHardwareRand] Using RdRand as an additional entropy source
2020-08-25T03:29:04Z [init] [InitSignatureCache] Using 16 MiB out of 32/2 requested for signature cache, able to store 524288 elements
2020-08-25T03:29:04Z [init] [InitScriptExecutionCache] Using 16 MiB out of 32/2 requested for script execution cache, able to store 524288 elements
2020-08-25T03:29:04Z [init] [LoadChainTip] Loaded best chain: hashBestChain=0fff88f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e22ff height=0 date=2011-02-02T23:16:42Z progress=1.000000
2020-08-25T03:29:04Z [init] [AppInitMain] block tree size = 1
2020-08-25T03:29:04Z [init] [AppInitMain] nBestHeight = 0
2020-08-25T03:29:04Z [loadblk] [LoadMempool] Imported mempool transactions from disk: 0 succeeded, 0 failed, 0 expired, 0 already there, 0 waiting for initial broadcast
2020-08-25T03:29:04Z [dnsseed] [ThreadDNSAddressSeed] 0 addresses found from DNS seeds
```
ACKs for top commit:
laanwj:
Code review ACK b4511e2e2ed1a6077ae6826a9ee6b7a311293d08
MarcoFalke:
review ACK b4511e2e2ed1a6077ae6826a9ee6b7a311293d08 🌃
Tree-SHA512: d100f5364630c323f31d275259864c597f7725e462d5f4bdedcc7033ea616d7fc0d16ef1b2af557e692f4deea73c6773ccfc681589e7bf6ba970b9ec169040c7
2021-02-18 14:20:42 +01:00
|
|
|
std::string m_source_file;
|
|
|
|
const int m_source_line;
|
2024-11-20 17:31:08 +01:00
|
|
|
std::string m_msg;
|
|
|
|
|
2018-09-14 13:59:02 +02:00
|
|
|
public:
|
2024-11-20 17:31:08 +01:00
|
|
|
CBatchedLogger(BCLog::LogFlags category, BCLog::Level level, const std::string& logging_function,
|
|
|
|
const std::string& m_source_file, int m_source_line);
|
2018-09-14 13:59:02 +02:00
|
|
|
virtual ~CBatchedLogger();
|
|
|
|
|
|
|
|
template<typename... Args>
|
2019-01-10 11:59:22 +01:00
|
|
|
void Batch(const std::string& fmt, const Args&... args)
|
2018-09-14 13:59:02 +02:00
|
|
|
{
|
2024-11-20 17:31:08 +01:00
|
|
|
if (!m_accept) {
|
2019-03-21 07:46:27 +01:00
|
|
|
return;
|
|
|
|
}
|
2024-11-20 17:31:08 +01:00
|
|
|
m_msg += " " + strprintf(fmt, args...) + "\n";
|
2018-09-14 13:59:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Flush();
|
|
|
|
};
|
|
|
|
|
2021-11-12 11:19:44 +01:00
|
|
|
#endif // BITCOIN_BATCHEDLOGGER_H
|