aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Posen <jimpo@coinbase.com>2018-04-11 14:06:35 -0700
committerJim Posen <jimpo@coinbase.com>2018-04-29 14:37:17 -0700
commit1eac317f25b905e97e311130ab19c3b0d257fc04 (patch)
treecf844c12f7b18d452492200dab948d6ba9d40028
parent3316a9ebb66171937efddb213daed64fe51c4082 (diff)
downloadbitcoin-1eac317f25b905e97e311130ab19c3b0d257fc04.tar.xz
util: Refactor GetLogCategory.
Changing parameter types from pointers to references and uint32_t to BCLog::LogFlags simplies calling code.
-rw-r--r--src/init.cpp10
-rw-r--r--src/logging.cpp51
-rw-r--r--src/logging.h8
-rw-r--r--src/rpc/misc.cpp17
4 files changed, 48 insertions, 38 deletions
diff --git a/src/init.cpp b/src/init.cpp
index ccaa09a85e..c0eb746d7b 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -963,24 +963,18 @@ bool AppInitParameterInteraction()
if (std::none_of(categories.begin(), categories.end(),
[](std::string cat){return cat == "0" || cat == "none";})) {
for (const auto& cat : categories) {
- uint32_t flag = 0;
- if (!GetLogCategory(&flag, &cat)) {
+ if (!g_logger->EnableCategory(cat)) {
InitWarning(strprintf(_("Unsupported logging category %s=%s."), "-debug", cat));
- continue;
}
- g_logger->EnableCategory(static_cast<BCLog::LogFlags>(flag));
}
}
}
// Now remove the logging categories which were explicitly excluded
for (const std::string& cat : gArgs.GetArgs("-debugexclude")) {
- uint32_t flag = 0;
- if (!GetLogCategory(&flag, &cat)) {
+ if (!g_logger->DisableCategory(cat)) {
InitWarning(strprintf(_("Unsupported logging category %s=%s."), "-debugexclude", cat));
- continue;
}
- g_logger->DisableCategory(static_cast<BCLog::LogFlags>(flag));
}
// Check for -debugnet
diff --git a/src/logging.cpp b/src/logging.cpp
index 7604c0fd94..dc1ed0afb6 100644
--- a/src/logging.cpp
+++ b/src/logging.cpp
@@ -5,7 +5,6 @@
#include <logging.h>
#include <util.h>
-#include <utilstrencodings.h>
const char * const DEFAULT_DEBUGLOGFILE = "debug.log";
@@ -64,11 +63,27 @@ void BCLog::Logger::EnableCategory(BCLog::LogFlags flag)
logCategories |= flag;
}
+bool BCLog::Logger::EnableCategory(const std::string& str)
+{
+ BCLog::LogFlags flag;
+ if (!GetLogCategory(flag, str)) return false;
+ EnableCategory(flag);
+ return true;
+}
+
void BCLog::Logger::DisableCategory(BCLog::LogFlags flag)
{
logCategories &= ~flag;
}
+bool BCLog::Logger::DisableCategory(const std::string& str)
+{
+ BCLog::LogFlags flag;
+ if (!GetLogCategory(flag, str)) return false;
+ DisableCategory(flag);
+ return true;
+}
+
bool BCLog::Logger::WillLogCategory(BCLog::LogFlags category) const
{
return (logCategories.load(std::memory_order_relaxed) & category) != 0;
@@ -81,7 +96,7 @@ bool BCLog::Logger::DefaultShrinkDebugFile() const
struct CLogCategoryDesc
{
- uint32_t flag;
+ BCLog::LogFlags flag;
std::string category;
};
@@ -114,19 +129,17 @@ const CLogCategoryDesc LogCategories[] =
{BCLog::ALL, "all"},
};
-bool GetLogCategory(uint32_t *f, const std::string *str)
+bool GetLogCategory(BCLog::LogFlags& flag, const std::string& str)
{
- if (f && str) {
- if (*str == "") {
- *f = BCLog::ALL;
+ if (str == "") {
+ flag = BCLog::ALL;
+ return true;
+ }
+ for (const CLogCategoryDesc& category_desc : LogCategories) {
+ if (category_desc.category == str) {
+ flag = category_desc.flag;
return true;
}
- for (unsigned int i = 0; i < ARRAYLEN(LogCategories); i++) {
- if (LogCategories[i].category == *str) {
- *f = LogCategories[i].flag;
- return true;
- }
- }
}
return false;
}
@@ -135,11 +148,11 @@ std::string ListLogCategories()
{
std::string ret;
int outcount = 0;
- for (unsigned int i = 0; i < ARRAYLEN(LogCategories); i++) {
+ for (const CLogCategoryDesc& category_desc : LogCategories) {
// Omit the special cases.
- if (LogCategories[i].flag != BCLog::NONE && LogCategories[i].flag != BCLog::ALL) {
+ if (category_desc.flag != BCLog::NONE && category_desc.flag != BCLog::ALL) {
if (outcount != 0) ret += ", ";
- ret += LogCategories[i].category;
+ ret += category_desc.category;
outcount++;
}
}
@@ -149,12 +162,12 @@ std::string ListLogCategories()
std::vector<CLogCategoryActive> ListActiveLogCategories()
{
std::vector<CLogCategoryActive> ret;
- for (unsigned int i = 0; i < ARRAYLEN(LogCategories); i++) {
+ for (const CLogCategoryDesc& category_desc : LogCategories) {
// Omit the special cases.
- if (LogCategories[i].flag != BCLog::NONE && LogCategories[i].flag != BCLog::ALL) {
+ if (category_desc.flag != BCLog::NONE && category_desc.flag != BCLog::ALL) {
CLogCategoryActive catActive;
- catActive.category = LogCategories[i].category;
- catActive.active = LogAcceptCategory(LogCategories[i].flag);
+ catActive.category = category_desc.category;
+ catActive.active = LogAcceptCategory(category_desc.flag);
ret.push_back(catActive);
}
}
diff --git a/src/logging.h b/src/logging.h
index 7a1c25233a..b88c9d9919 100644
--- a/src/logging.h
+++ b/src/logging.h
@@ -95,8 +95,12 @@ namespace BCLog {
void ShrinkDebugFile();
uint32_t GetCategoryMask() const { return logCategories.load(); }
+
void EnableCategory(LogFlags flag);
+ bool EnableCategory(const std::string& str);
void DisableCategory(LogFlags flag);
+ bool DisableCategory(const std::string& str);
+
bool WillLogCategory(LogFlags category) const;
bool DefaultShrinkDebugFile() const;
@@ -118,8 +122,8 @@ std::string ListLogCategories();
/** Returns a vector of the active log categories. */
std::vector<CLogCategoryActive> ListActiveLogCategories();
-/** Return true if str parses as a log category and set the flags in f */
-bool GetLogCategory(uint32_t *f, const std::string *str);
+/** Return true if str parses as a log category and set the flag */
+bool GetLogCategory(BCLog::LogFlags& flag, const std::string& str);
/** Get format string from VA_ARGS for error reporting */
template<typename... Args> std::string FormatStringFromLogArgs(const char *fmt, const Args&... args) { return fmt; }
diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp
index 26bf21356e..0c93108bce 100644
--- a/src/rpc/misc.cpp
+++ b/src/rpc/misc.cpp
@@ -349,18 +349,17 @@ UniValue getmemoryinfo(const JSONRPCRequest& request)
void EnableOrDisableLogCategories(UniValue cats, bool enable) {
cats = cats.get_array();
for (unsigned int i = 0; i < cats.size(); ++i) {
- uint32_t flag = 0;
std::string cat = cats[i].get_str();
- if (!GetLogCategory(&flag, &cat)) {
- throw JSONRPCError(RPC_INVALID_PARAMETER, "unknown logging category " + cat);
- }
- if (flag == BCLog::NONE) {
- return;
- }
+
+ bool success;
if (enable) {
- g_logger->EnableCategory(static_cast<BCLog::LogFlags>(flag));
+ success = g_logger->EnableCategory(cat);
} else {
- g_logger->DisableCategory(static_cast<BCLog::LogFlags>(flag));
+ success = g_logger->DisableCategory(cat);
+ }
+
+ if (!success) {
+ throw JSONRPCError(RPC_INVALID_PARAMETER, "unknown logging category " + cat);
}
}
}