mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-04 04:45:10 +02:00
Merge #12954: util: Refactor logging code into a global object
8c2d695c4autil: Store debug log file path in BCLog::Logger member. (Jim Posen)8e7b961388scripted-diff: Rename BCLog::Logger member variables. (Jim Posen)1eac317f25util: Refactor GetLogCategory. (Jim Posen)3316a9ebb6util: Encapsulate logCategories within BCLog::Logger. (Jim Posen)6a6d764ca5util: Move debug file management functions into Logger. (Jim Posen)f55f4fcf05util: Establish global logger object. (Jim Posen) Pull request description: This is purely a refactor with no behavior changes. This creates a new class `BCLog::Logger` to encapsulate all global logging configuration and state. Tree-SHA512: b34811f54a53b7375d7b6f84925453c6f2419d21179379ee28b3843d0f4ff8e22020de84a5e783453ea927e9074e32de8ecd05a6fa50d7bb05502001aaed8e53
This commit is contained in:
@@ -346,21 +346,22 @@ UniValue getmemoryinfo(const JSONRPCRequest& request)
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t getCategoryMask(UniValue cats) {
|
||||
void EnableOrDisableLogCategories(UniValue cats, bool enable) {
|
||||
cats = cats.get_array();
|
||||
uint32_t mask = 0;
|
||||
for (unsigned int i = 0; i < cats.size(); ++i) {
|
||||
uint32_t flag = 0;
|
||||
std::string cat = cats[i].get_str();
|
||||
if (!GetLogCategory(&flag, &cat)) {
|
||||
|
||||
bool success;
|
||||
if (enable) {
|
||||
success = g_logger->EnableCategory(cat);
|
||||
} else {
|
||||
success = g_logger->DisableCategory(cat);
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "unknown logging category " + cat);
|
||||
}
|
||||
if (flag == BCLog::NONE) {
|
||||
return 0;
|
||||
}
|
||||
mask |= flag;
|
||||
}
|
||||
return mask;
|
||||
}
|
||||
|
||||
UniValue logging(const JSONRPCRequest& request)
|
||||
@@ -399,25 +400,25 @@ UniValue logging(const JSONRPCRequest& request)
|
||||
);
|
||||
}
|
||||
|
||||
uint32_t originalLogCategories = logCategories;
|
||||
uint32_t original_log_categories = g_logger->GetCategoryMask();
|
||||
if (request.params[0].isArray()) {
|
||||
logCategories |= getCategoryMask(request.params[0]);
|
||||
EnableOrDisableLogCategories(request.params[0], true);
|
||||
}
|
||||
|
||||
if (request.params[1].isArray()) {
|
||||
logCategories &= ~getCategoryMask(request.params[1]);
|
||||
EnableOrDisableLogCategories(request.params[1], false);
|
||||
}
|
||||
uint32_t updated_log_categories = g_logger->GetCategoryMask();
|
||||
uint32_t changed_log_categories = original_log_categories ^ updated_log_categories;
|
||||
|
||||
// Update libevent logging if BCLog::LIBEVENT has changed.
|
||||
// If the library version doesn't allow it, UpdateHTTPServerLogging() returns false,
|
||||
// in which case we should clear the BCLog::LIBEVENT flag.
|
||||
// Throw an error if the user has explicitly asked to change only the libevent
|
||||
// flag and it failed.
|
||||
uint32_t changedLogCategories = originalLogCategories ^ logCategories;
|
||||
if (changedLogCategories & BCLog::LIBEVENT) {
|
||||
if (!UpdateHTTPServerLogging(logCategories & BCLog::LIBEVENT)) {
|
||||
logCategories &= ~BCLog::LIBEVENT;
|
||||
if (changedLogCategories == BCLog::LIBEVENT) {
|
||||
if (changed_log_categories & BCLog::LIBEVENT) {
|
||||
if (!UpdateHTTPServerLogging(g_logger->WillLogCategory(BCLog::LIBEVENT))) {
|
||||
g_logger->DisableCategory(BCLog::LIBEVENT);
|
||||
if (changed_log_categories == BCLog::LIBEVENT) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "libevent logging cannot be updated when using libevent before v2.1.1.");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user