Bitcoin ABC  0.26.3
P2P Digital Currency
Classes | Namespaces | Macros | Enumerations | Functions | Variables
logging.h File Reference
#include <fs.h>
#include <threadsafety.h>
#include <tinyformat.h>
#include <util/string.h>
#include <atomic>
#include <cstdint>
#include <functional>
#include <list>
#include <mutex>
#include <string>
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
 

Namespaces

 BCLog
 

Macros

#define LogPrintf(...)   LogPrintf_(__func__, __FILE__, __LINE__, __VA_ARGS__)
 
#define LogPrint(category, ...)
 
#define LogPrintfToBeContinued   LogPrintf
 These are aliases used to explicitly state that the message should not end with a newline character. More...
 
#define LogPrintToBeContinued   LogPrint
 

Enumerations

enum  BCLog::LogFlags : uint32_t {
  BCLog::NONE = 0 , BCLog::NET = (1 << 0) , BCLog::TOR = (1 << 1) , BCLog::MEMPOOL = (1 << 2) ,
  BCLog::HTTP = (1 << 3) , BCLog::BENCH = (1 << 4) , BCLog::ZMQ = (1 << 5) , BCLog::WALLETDB = (1 << 6) ,
  BCLog::RPC = (1 << 7) , BCLog::ESTIMATEFEE = (1 << 8) , BCLog::ADDRMAN = (1 << 9) , BCLog::SELECTCOINS = (1 << 10) ,
  BCLog::REINDEX = (1 << 11) , BCLog::CMPCTBLOCK = (1 << 12) , BCLog::RAND = (1 << 13) , BCLog::PRUNE = (1 << 14) ,
  BCLog::PROXY = (1 << 15) , BCLog::MEMPOOLREJ = (1 << 16) , BCLog::LIBEVENT = (1 << 17) , BCLog::COINDB = (1 << 18) ,
  BCLog::QT = (1 << 19) , BCLog::LEVELDB = (1 << 20) , BCLog::VALIDATION = (1 << 21) , BCLog::AVALANCHE = (1 << 22) ,
  BCLog::I2P = (1 << 23) , BCLog::CHRONIK = (1 << 24) , BCLog::BLOCKSTORE = (1 << 26) , BCLog::NETDEBUG = (1 << 27) ,
  BCLog::ALL = ~uint32_t(0)
}
 

Functions

BCLog::LoggerLogInstance ()
 
static bool LogAcceptCategory (BCLog::LogFlags category)
 Return true if log accepts specified category. More...
 
bool GetLogCategory (BCLog::LogFlags &flag, const std::string &str)
 Return true if str parses as a log category and set the flag. More...
 
template<typename... Args>
static void LogPrintf_ (const std::string &logging_function, const std::string &source_file, const int source_line, const char *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
 
bool fLogIPs
 
const char *const DEFAULT_DEBUGLOGFILE
 

Macro Definition Documentation

◆ LogPrint

#define LogPrint (   category,
  ... 
)
Value:
do { \
if (LogAcceptCategory((category))) { \
LogPrintf(__VA_ARGS__); \
} \
} while (0)
static bool LogAcceptCategory(BCLog::LogFlags category)
Return true if log accepts specified category.
Definition: logging.h:176

Definition at line 210 of file logging.h.

◆ LogPrintf

#define LogPrintf (   ...)    LogPrintf_(__func__, __FILE__, __LINE__, __VA_ARGS__)

Definition at line 206 of file logging.h.

◆ LogPrintfToBeContinued

#define LogPrintfToBeContinued   LogPrintf

These are aliases used to explicitly state that the message should not end with a newline character.

It allows for detecting the missing newlines that could make the logs hard to read.

Definition at line 222 of file logging.h.

◆ LogPrintToBeContinued

#define LogPrintToBeContinued   LogPrint

Definition at line 223 of file logging.h.

Function Documentation

◆ GetLogCategory()

bool GetLogCategory ( BCLog::LogFlags flag,
const std::string &  str 
)

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

Definition at line 141 of file logging.cpp.

Here is the caller graph for this function:

◆ LogAcceptCategory()

static bool LogAcceptCategory ( BCLog::LogFlags  category)
inlinestatic

Return true if log accepts specified category.

Definition at line 176 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 instance 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 20 of file logging.cpp.

Here is the caller graph for this function:

◆ LogPrintf_()

template<typename... Args>
static void LogPrintf_ ( const std::string &  logging_function,
const std::string &  source_file,
const int  source_line,
const char *  fmt,
const Args &...  args 
)
inlinestatic

Original format string will have newline so don't add one here

Definition at line 188 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 18 of file logging.cpp.

◆ DEFAULT_LOGIPS

const bool DEFAULT_LOGIPS = false
static

Definition at line 23 of file logging.h.

◆ DEFAULT_LOGSOURCELOCATIONS

const bool DEFAULT_LOGSOURCELOCATIONS = false
static

Definition at line 26 of file logging.h.

◆ DEFAULT_LOGTHREADNAMES

const bool DEFAULT_LOGTHREADNAMES = false
static

Definition at line 25 of file logging.h.

◆ DEFAULT_LOGTIMEMICROS

const bool DEFAULT_LOGTIMEMICROS = false
static

Definition at line 22 of file logging.h.

◆ DEFAULT_LOGTIMESTAMPS

const bool DEFAULT_LOGTIMESTAMPS = true
static

Definition at line 24 of file logging.h.

◆ fLogIPs

bool fLogIPs
extern

Definition at line 17 of file logging.cpp.