Bitcoin Core 28.99.0
P2P Digital Currency
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions | Variables
logging.h File Reference
#include <threadsafety.h>
#include <tinyformat.h>
#include <util/fs.h>
#include <util/string.h>
#include <util/time.h>
#include <atomic>
#include <cstdint>
#include <functional>
#include <list>
#include <mutex>
#include <string>
#include <unordered_map>
#include <vector>
Include dependency graph for logging.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  LogCategory
 
class  BCLog::Logger
 
struct  BCLog::Logger::BufferedLog
 

Namespaces

namespace  BCLog
 

Macros

#define LogPrintLevel_(category, level, ...)   LogPrintFormatInternal(__func__, __FILE__, __LINE__, category, level, __VA_ARGS__)
 
#define LogInfo(...)   LogPrintLevel_(BCLog::LogFlags::ALL, BCLog::Level::Info, __VA_ARGS__)
 
#define LogWarning(...)   LogPrintLevel_(BCLog::LogFlags::ALL, BCLog::Level::Warning, __VA_ARGS__)
 
#define LogError(...)   LogPrintLevel_(BCLog::LogFlags::ALL, BCLog::Level::Error, __VA_ARGS__)
 
#define LogPrintf(...)   LogInfo(__VA_ARGS__)
 
#define LogPrintLevel(category, level, ...)
 
#define LogDebug(category, ...)   LogPrintLevel(category, BCLog::Level::Debug, __VA_ARGS__)
 
#define LogTrace(category, ...)   LogPrintLevel(category, BCLog::Level::Trace, __VA_ARGS__)
 

Typedefs

using BCLog::CategoryMask = uint64_t
 

Enumerations

enum  BCLog::LogFlags : CategoryMask {
  BCLog::NONE = CategoryMask{0} , BCLog::NET = (CategoryMask{1} << 0) , BCLog::TOR = (CategoryMask{1} << 1) , BCLog::MEMPOOL = (CategoryMask{1} << 2) ,
  BCLog::HTTP = (CategoryMask{1} << 3) , BCLog::BENCH = (CategoryMask{1} << 4) , BCLog::ZMQ = (CategoryMask{1} << 5) , BCLog::WALLETDB = (CategoryMask{1} << 6) ,
  BCLog::RPC = (CategoryMask{1} << 7) , BCLog::ESTIMATEFEE = (CategoryMask{1} << 8) , BCLog::ADDRMAN = (CategoryMask{1} << 9) , BCLog::SELECTCOINS = (CategoryMask{1} << 10) ,
  BCLog::REINDEX = (CategoryMask{1} << 11) , BCLog::CMPCTBLOCK = (CategoryMask{1} << 12) , BCLog::RAND = (CategoryMask{1} << 13) , BCLog::PRUNE = (CategoryMask{1} << 14) ,
  BCLog::PROXY = (CategoryMask{1} << 15) , BCLog::MEMPOOLREJ = (CategoryMask{1} << 16) , BCLog::LIBEVENT = (CategoryMask{1} << 17) , BCLog::COINDB = (CategoryMask{1} << 18) ,
  BCLog::QT = (CategoryMask{1} << 19) , BCLog::LEVELDB = (CategoryMask{1} << 20) , BCLog::VALIDATION = (CategoryMask{1} << 21) , BCLog::I2P = (CategoryMask{1} << 22) ,
  BCLog::IPC = (CategoryMask{1} << 23) , BCLog::BLOCKSTORAGE = (CategoryMask{1} << 25) , BCLog::TXRECONCILIATION = (CategoryMask{1} << 26) , BCLog::SCAN = (CategoryMask{1} << 27) ,
  BCLog::TXPACKAGES = (CategoryMask{1} << 28) , BCLog::ALL = ~NONE
}
 
enum class  BCLog::Level {
  BCLog::Trace = 0 , BCLog::Debug , BCLog::Info , BCLog::Warning ,
  BCLog::Error
}
 

Functions

BCLog::LoggerLogInstance ()
 
static bool LogAcceptCategory (BCLog::LogFlags category, BCLog::Level level)
 Return true if log accepts specified category, at the specified level. More...
 
bool GetLogCategory (BCLog::LogFlags &flag, std::string_view str)
 Return true if str parses as a log category and set the flag. More...
 
template<typename... Args>
void LogPrintFormatInternal (std::string_view logging_function, std::string_view source_file, const int source_line, const BCLog::LogFlags flag, const BCLog::Level level, util::ConstevalFormatString< sizeof...(Args)> fmt, const Args &... args)
 

Variables

static const bool DEFAULT_LOGTIMEMICROS = false
 
static const bool DEFAULT_LOGIPS = false
 
static const bool DEFAULT_LOGTIMESTAMPS = true
 
static const bool DEFAULT_LOGTHREADNAMES = false
 
static const bool DEFAULT_LOGSOURCELOCATIONS = false
 
static constexpr bool DEFAULT_LOGLEVELALWAYS = false
 
const char *const DEFAULT_DEBUGLOGFILE
 
bool fLogIPs
 
constexpr auto BCLog::DEFAULT_LOG_LEVEL {Level::Debug}
 
constexpr size_t BCLog::DEFAULT_MAX_LOG_BUFFER {1'000'000}
 

Macro Definition Documentation

◆ LogDebug

#define LogDebug (   category,
  ... 
)    LogPrintLevel(category, BCLog::Level::Debug, __VA_ARGS__)

Definition at line 280 of file logging.h.

◆ LogError

#define LogError (   ...)    LogPrintLevel_(BCLog::LogFlags::ALL, BCLog::Level::Error, __VA_ARGS__)

Definition at line 263 of file logging.h.

◆ LogInfo

#define LogInfo (   ...)    LogPrintLevel_(BCLog::LogFlags::ALL, BCLog::Level::Info, __VA_ARGS__)

Definition at line 261 of file logging.h.

◆ LogPrintf

#define LogPrintf (   ...)    LogInfo(__VA_ARGS__)

Definition at line 266 of file logging.h.

◆ LogPrintLevel

#define LogPrintLevel (   category,
  level,
  ... 
)
Value:
do { \
if (LogAcceptCategory((category), (level))) { \
LogPrintLevel_(category, level, __VA_ARGS__); \
} \
} while (0)
static bool LogAcceptCategory(BCLog::LogFlags category, BCLog::Level level)
Return true if log accepts specified category, at the specified level.
Definition: logging.h:233

Definition at line 272 of file logging.h.

◆ LogPrintLevel_

#define LogPrintLevel_ (   category,
  level,
  ... 
)    LogPrintFormatInternal(__func__, __FILE__, __LINE__, category, level, __VA_ARGS__)

Definition at line 255 of file logging.h.

◆ LogTrace

#define LogTrace (   category,
  ... 
)    LogPrintLevel(category, BCLog::Level::Trace, __VA_ARGS__)

Definition at line 281 of file logging.h.

◆ LogWarning

#define LogWarning (   ...)    LogPrintLevel_(BCLog::LogFlags::ALL, BCLog::Level::Warning, __VA_ARGS__)

Definition at line 262 of file logging.h.

Function Documentation

◆ GetLogCategory()

bool GetLogCategory ( BCLog::LogFlags flag,
std::string_view  str 
)

Return true if str parses as a log category and set the flag.

Definition at line 216 of file logging.cpp.

Here is the caller graph for this function:

◆ LogAcceptCategory()

static bool LogAcceptCategory ( BCLog::LogFlags  category,
BCLog::Level  level 
)
inlinestatic

Return true if log accepts specified category, at the specified level.

Definition at line 233 of file logging.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LogInstance()

BCLog::Logger & LogInstance ( )

NOTE: the logger instances is leaked on exit. This is ugly, but will be cleaned up by the OS/libc. Defining a logger as a global object doesn't work since the order of destruction of static/global objects is undefined. Consider if the logger gets destroyed, and then some later destructor calls LogPrintf, maybe indirectly, and you get a core dump at shutdown trying to access the logger. When the shutdown sequence is fully audited and tested, explicit destruction of these objects can be implemented by changing this from a raw pointer to a std::unique_ptr. Since the ~Logger() destructor is never called, the Logger class and all its subclasses must have implicitly-defined destructors.

This method of initialization was originally introduced in ee3374234c60aba2cc4c5cd5cac1c0aefc2d817c.

Definition at line 24 of file logging.cpp.

Here is the caller graph for this function:

◆ LogPrintFormatInternal()

template<typename... Args>
void LogPrintFormatInternal ( std::string_view  logging_function,
std::string_view  source_file,
const int  source_line,
const BCLog::LogFlags  flag,
const BCLog::Level  level,
util::ConstevalFormatString< sizeof...(Args)>  fmt,
const Args &...  args 
)
inline

Definition at line 242 of file logging.h.

Here is the call graph for this function:

Variable Documentation

◆ DEFAULT_DEBUGLOGFILE

const char* const DEFAULT_DEBUGLOGFILE
extern

Definition at line 21 of file logging.cpp.

◆ DEFAULT_LOGIPS

const bool DEFAULT_LOGIPS = false
static

Definition at line 25 of file logging.h.

◆ DEFAULT_LOGLEVELALWAYS

constexpr bool DEFAULT_LOGLEVELALWAYS = false
staticconstexpr

Definition at line 29 of file logging.h.

◆ DEFAULT_LOGSOURCELOCATIONS

const bool DEFAULT_LOGSOURCELOCATIONS = false
static

Definition at line 28 of file logging.h.

◆ DEFAULT_LOGTHREADNAMES

const bool DEFAULT_LOGTHREADNAMES = false
static

Definition at line 27 of file logging.h.

◆ DEFAULT_LOGTIMEMICROS

const bool DEFAULT_LOGTIMEMICROS = false
static

Definition at line 24 of file logging.h.

◆ DEFAULT_LOGTIMESTAMPS

const bool DEFAULT_LOGTIMESTAMPS = true
static

Definition at line 26 of file logging.h.

◆ fLogIPs

bool fLogIPs
extern

Definition at line 45 of file logging.cpp.