mirror of
https://codeberg.org/anoncontributorxmr/monero.git
synced 2024-12-23 13:47:47 +00:00
Merge pull request #2512
792ba4f0
Log categories can now be added to and removed from (moneromooo-monero)48f92eb6
easylogging++: add categories getter (moneromooo-monero)f35afe62
epee: factor log level/categories setting (moneromooo-monero)
This commit is contained in:
commit
3bab2676ec
10 changed files with 78 additions and 11 deletions
|
@ -126,6 +126,7 @@
|
||||||
std::string mlog_get_default_log_path(const char *default_filename);
|
std::string mlog_get_default_log_path(const char *default_filename);
|
||||||
void mlog_configure(const std::string &filename_base, bool console, const std::size_t max_log_file_size = MAX_LOG_FILE_SIZE);
|
void mlog_configure(const std::string &filename_base, bool console, const std::size_t max_log_file_size = MAX_LOG_FILE_SIZE);
|
||||||
void mlog_set_categories(const char *categories);
|
void mlog_set_categories(const char *categories);
|
||||||
|
std::string mlog_get_categories();
|
||||||
void mlog_set_log_level(int level);
|
void mlog_set_log_level(int level);
|
||||||
void mlog_set_log(const char *log);
|
void mlog_set_log(const char *log);
|
||||||
|
|
||||||
|
|
|
@ -144,16 +144,52 @@ void mlog_configure(const std::string &filename_base, bool console, const std::s
|
||||||
|
|
||||||
void mlog_set_categories(const char *categories)
|
void mlog_set_categories(const char *categories)
|
||||||
{
|
{
|
||||||
el::Loggers::setCategories(categories);
|
std::string new_categories;
|
||||||
MLOG_LOG("New log categories: " << categories);
|
if (*categories)
|
||||||
|
{
|
||||||
|
if (*categories == '+')
|
||||||
|
{
|
||||||
|
++categories;
|
||||||
|
new_categories = mlog_get_categories();
|
||||||
|
if (*categories)
|
||||||
|
{
|
||||||
|
if (!new_categories.empty())
|
||||||
|
new_categories += ",";
|
||||||
|
new_categories += categories;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (*categories == '-')
|
||||||
|
{
|
||||||
|
++categories;
|
||||||
|
new_categories = mlog_get_categories();
|
||||||
|
std::vector<std::string> single_categories;
|
||||||
|
boost::split(single_categories, categories, boost::is_any_of(","), boost::token_compress_on);
|
||||||
|
for (const std::string &s: single_categories)
|
||||||
|
{
|
||||||
|
size_t pos = new_categories.find(s);
|
||||||
|
if (pos != std::string::npos)
|
||||||
|
new_categories = new_categories.erase(pos, s.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_categories = categories;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
el::Loggers::setCategories(new_categories.c_str(), true);
|
||||||
|
MLOG_LOG("New log categories: " << el::Loggers::getCategories());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string mlog_get_categories()
|
||||||
|
{
|
||||||
|
return el::Loggers::getCategories();
|
||||||
}
|
}
|
||||||
|
|
||||||
// maps epee style log level to new logging system
|
// maps epee style log level to new logging system
|
||||||
void mlog_set_log_level(int level)
|
void mlog_set_log_level(int level)
|
||||||
{
|
{
|
||||||
const char *categories = get_default_categories(level);
|
const char *categories = get_default_categories(level);
|
||||||
el::Loggers::setCategories(categories);
|
mlog_set_categories(categories);
|
||||||
MLOG_LOG("New log categories: " << categories);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlog_set_log(const char *log)
|
void mlog_set_log(const char *log)
|
||||||
|
|
16
external/easylogging++/easylogging++.cc
vendored
16
external/easylogging++/easylogging++.cc
vendored
|
@ -1961,8 +1961,13 @@ void VRegistry::setCategories(const char* categories, bool clear) {
|
||||||
m_categories.push_back(std::make_pair(ss.str(), level));
|
m_categories.push_back(std::make_pair(ss.str(), level));
|
||||||
};
|
};
|
||||||
|
|
||||||
if (clear)
|
if (clear) {
|
||||||
m_categories.clear();
|
m_categories.clear();
|
||||||
|
m_categoriesString.clear();
|
||||||
|
}
|
||||||
|
if (!m_categoriesString.empty())
|
||||||
|
m_categoriesString += ",";
|
||||||
|
m_categoriesString += categories;
|
||||||
if (!categories)
|
if (!categories)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2001,6 +2006,11 @@ void VRegistry::setCategories(const char* categories, bool clear) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string VRegistry::getCategories() {
|
||||||
|
base::threading::ScopedLock scopedLock(lock());
|
||||||
|
return m_categoriesString;
|
||||||
|
}
|
||||||
|
|
||||||
// Log levels are sorted in a weird way...
|
// Log levels are sorted in a weird way...
|
||||||
static int priority(Level level) {
|
static int priority(Level level) {
|
||||||
if (level == Level::Fatal) return 0;
|
if (level == Level::Fatal) return 0;
|
||||||
|
@ -3073,6 +3083,10 @@ void Loggers::setCategories(const char* categories, bool clear) {
|
||||||
ELPP->vRegistry()->setCategories(categories, clear);
|
ELPP->vRegistry()->setCategories(categories, clear);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Loggers::getCategories() {
|
||||||
|
return ELPP->vRegistry()->getCategories();
|
||||||
|
}
|
||||||
|
|
||||||
void Loggers::clearCategories(void) {
|
void Loggers::clearCategories(void) {
|
||||||
ELPP->vRegistry()->clearCategories();
|
ELPP->vRegistry()->clearCategories();
|
||||||
}
|
}
|
||||||
|
|
5
external/easylogging++/easylogging++.h
vendored
5
external/easylogging++/easylogging++.h
vendored
|
@ -2488,6 +2488,8 @@ class VRegistry : base::NoCopy, public base::threading::ThreadSafe {
|
||||||
|
|
||||||
void setCategories(const char* categories, bool clear = true);
|
void setCategories(const char* categories, bool clear = true);
|
||||||
|
|
||||||
|
std::string getCategories();
|
||||||
|
|
||||||
void setModules(const char* modules);
|
void setModules(const char* modules);
|
||||||
|
|
||||||
bool allowed(Level level, const char* category);
|
bool allowed(Level level, const char* category);
|
||||||
|
@ -2518,6 +2520,7 @@ class VRegistry : base::NoCopy, public base::threading::ThreadSafe {
|
||||||
base::type::EnumType* m_pFlags;
|
base::type::EnumType* m_pFlags;
|
||||||
std::map<std::string, base::type::VerboseLevel> m_modules;
|
std::map<std::string, base::type::VerboseLevel> m_modules;
|
||||||
std::deque<std::pair<std::string, Level>> m_categories;
|
std::deque<std::pair<std::string, Level>> m_categories;
|
||||||
|
std::string m_categoriesString;
|
||||||
std::string m_filenameCommonPrefix;
|
std::string m_filenameCommonPrefix;
|
||||||
};
|
};
|
||||||
} // namespace base
|
} // namespace base
|
||||||
|
@ -3953,6 +3956,8 @@ class Loggers : base::StaticClass {
|
||||||
static void setVModules(const char* modules);
|
static void setVModules(const char* modules);
|
||||||
/// @brief Sets categories as specified (on the fly)
|
/// @brief Sets categories as specified (on the fly)
|
||||||
static void setCategories(const char* categories, bool clear = true);
|
static void setCategories(const char* categories, bool clear = true);
|
||||||
|
/// @brief Gets current categories
|
||||||
|
static std::string getCategories();
|
||||||
/// @brief Clears vmodules
|
/// @brief Clears vmodules
|
||||||
static void clearVModules(void);
|
static void clearVModules(void);
|
||||||
/// @brief Clears categories
|
/// @brief Clears categories
|
||||||
|
|
|
@ -125,12 +125,17 @@ bool t_command_parser_executor::print_blockchain_info(const std::vector<std::str
|
||||||
|
|
||||||
bool t_command_parser_executor::set_log_level(const std::vector<std::string>& args)
|
bool t_command_parser_executor::set_log_level(const std::vector<std::string>& args)
|
||||||
{
|
{
|
||||||
if(args.size() != 1)
|
if(args.size() > 1)
|
||||||
{
|
{
|
||||||
std::cout << "use: set_log [<log_level_number_0-4> | <categories>]" << std::endl;
|
std::cout << "use: set_log [<log_level_number_0-4> | <categories>]" << std::endl;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (args.empty())
|
||||||
|
{
|
||||||
|
return m_executor.set_log_categories("+");
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t l = 0;
|
uint16_t l = 0;
|
||||||
if(epee::string_tools::get_xtype_from_string(l, args[0]))
|
if(epee::string_tools::get_xtype_from_string(l, args[0]))
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,7 +141,7 @@ t_command_server::t_command_server(
|
||||||
m_command_lookup.set_handler(
|
m_command_lookup.set_handler(
|
||||||
"set_log"
|
"set_log"
|
||||||
, std::bind(&t_command_parser_executor::set_log_level, &m_parser, p::_1)
|
, std::bind(&t_command_parser_executor::set_log_level, &m_parser, p::_1)
|
||||||
, "set_log <level>|<categories> - Change current loglevel, <level> is a number 0-4"
|
, "set_log <level>|<{+,-,}categories> - Change current log level/categories, <level> is a number 0-4"
|
||||||
);
|
);
|
||||||
m_command_lookup.set_handler(
|
m_command_lookup.set_handler(
|
||||||
"diff"
|
"diff"
|
||||||
|
|
|
@ -599,7 +599,7 @@ bool t_rpc_command_executor::set_log_categories(const std::string &categories) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tools::success_msg_writer() << "Log categories are now " << categories;
|
tools::success_msg_writer() << "Log categories are now " << res.categories;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -831,6 +831,7 @@ namespace cryptonote
|
||||||
bool core_rpc_server::on_set_log_categories(const COMMAND_RPC_SET_LOG_CATEGORIES::request& req, COMMAND_RPC_SET_LOG_CATEGORIES::response& res)
|
bool core_rpc_server::on_set_log_categories(const COMMAND_RPC_SET_LOG_CATEGORIES::request& req, COMMAND_RPC_SET_LOG_CATEGORIES::response& res)
|
||||||
{
|
{
|
||||||
mlog_set_log(req.categories.c_str());
|
mlog_set_log(req.categories.c_str());
|
||||||
|
res.categories = mlog_get_categories();
|
||||||
res.status = CORE_RPC_STATUS_OK;
|
res.status = CORE_RPC_STATUS_OK;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -981,8 +981,11 @@ namespace cryptonote
|
||||||
struct response
|
struct response
|
||||||
{
|
{
|
||||||
std::string status;
|
std::string status;
|
||||||
|
std::string categories;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(status)
|
KV_SERIALIZE(status)
|
||||||
|
KV_SERIALIZE(categories)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -766,7 +766,7 @@ simple_wallet::simple_wallet()
|
||||||
m_cmd_binder.set_handler("donate", boost::bind(&simple_wallet::donate, this, _1), tr("donate [<ring_size>] <amount> [payment_id] - Donate <amount> to the development team (donate.getmonero.org)"));
|
m_cmd_binder.set_handler("donate", boost::bind(&simple_wallet::donate, this, _1), tr("donate [<ring_size>] <amount> [payment_id] - Donate <amount> to the development team (donate.getmonero.org)"));
|
||||||
m_cmd_binder.set_handler("sign_transfer", boost::bind(&simple_wallet::sign_transfer, this, _1), tr("Sign a transaction from a file"));
|
m_cmd_binder.set_handler("sign_transfer", boost::bind(&simple_wallet::sign_transfer, this, _1), tr("Sign a transaction from a file"));
|
||||||
m_cmd_binder.set_handler("submit_transfer", boost::bind(&simple_wallet::submit_transfer, this, _1), tr("Submit a signed transaction from a file"));
|
m_cmd_binder.set_handler("submit_transfer", boost::bind(&simple_wallet::submit_transfer, this, _1), tr("Submit a signed transaction from a file"));
|
||||||
m_cmd_binder.set_handler("set_log", boost::bind(&simple_wallet::set_log, this, _1), tr("set_log <level>|<categories> - Change current log detail (level must be <0-4>)"));
|
m_cmd_binder.set_handler("set_log", boost::bind(&simple_wallet::set_log, this, _1), tr("set_log <level>|{+,-,}<categories> - Change current log detail (level must be <0-4>)"));
|
||||||
m_cmd_binder.set_handler("address", boost::bind(&simple_wallet::print_address, this, _1), tr("Show current wallet public address"));
|
m_cmd_binder.set_handler("address", boost::bind(&simple_wallet::print_address, this, _1), tr("Show current wallet public address"));
|
||||||
m_cmd_binder.set_handler("integrated_address", boost::bind(&simple_wallet::print_integrated_address, this, _1), tr("integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID"));
|
m_cmd_binder.set_handler("integrated_address", boost::bind(&simple_wallet::print_integrated_address, this, _1), tr("integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID"));
|
||||||
m_cmd_binder.set_handler("address_book", boost::bind(&simple_wallet::address_book, this, _1), tr("address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Print all entries in the address book, optionally adding/deleting an entry to/from it"));
|
m_cmd_binder.set_handler("address_book", boost::bind(&simple_wallet::address_book, this, _1), tr("address_book [(add (<address> [pid <long or short payment id>])|<integrated address> [<description possibly with whitespaces>])|(delete <index>)] - Print all entries in the address book, optionally adding/deleting an entry to/from it"));
|
||||||
|
@ -875,12 +875,14 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args)
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
bool simple_wallet::set_log(const std::vector<std::string> &args)
|
bool simple_wallet::set_log(const std::vector<std::string> &args)
|
||||||
{
|
{
|
||||||
if(args.size() != 1)
|
if(args.size() > 1)
|
||||||
{
|
{
|
||||||
fail_msg_writer() << tr("usage: set_log <log_level_number_0-4> | <categories>");
|
fail_msg_writer() << tr("usage: set_log <log_level_number_0-4> | <categories>");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
mlog_set_log(args[0].c_str());
|
if (!args.empty())
|
||||||
|
mlog_set_log(args[0].c_str());
|
||||||
|
success_msg_writer() << "New log categories: " << mlog_get_categories();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in a new issue