mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-27 01:11:59 +02:00
logging: add LogPrintfCategory to log unconditionally with category
prefixing the output with the passed category name. - add documentation - add a unit test - update lint-logs.py - update lint-format-strings.py
This commit is contained in:
parent
b9416c3847
commit
eb8aab759f
@ -199,13 +199,18 @@ static inline void LogPrintf_(const std::string& logging_function, const std::st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define LogPrintLevel_(category, level, ...) LogPrintf_(__func__, __FILE__, __LINE__, category, level, __VA_ARGS__)
|
#define LogPrintLevel_(category, level, ...) LogPrintf_(__func__, __FILE__, __LINE__, category, level, __VA_ARGS__)
|
||||||
|
|
||||||
|
// Log unconditionally.
|
||||||
#define LogPrintf(...) LogPrintLevel_(BCLog::LogFlags::NONE, BCLog::Level::None, __VA_ARGS__)
|
#define LogPrintf(...) LogPrintLevel_(BCLog::LogFlags::NONE, BCLog::Level::None, __VA_ARGS__)
|
||||||
|
|
||||||
|
// Log unconditionally, prefixing the output with the passed category name.
|
||||||
|
#define LogPrintfCategory(category, ...) LogPrintLevel_(category, BCLog::Level::None, __VA_ARGS__)
|
||||||
|
|
||||||
// Use a macro instead of a function for conditional logging to prevent
|
// Use a macro instead of a function for conditional logging to prevent
|
||||||
// evaluating arguments when logging for the category is not enabled.
|
// evaluating arguments when logging for the category is not enabled.
|
||||||
|
|
||||||
|
// Log conditionally, prefixing the output with the passed category name.
|
||||||
#define LogPrint(category, ...) \
|
#define LogPrint(category, ...) \
|
||||||
do { \
|
do { \
|
||||||
if (LogAcceptCategory((category), BCLog::Level::Debug)) { \
|
if (LogAcceptCategory((category), BCLog::Level::Debug)) { \
|
||||||
@ -213,6 +218,7 @@ static inline void LogPrintf_(const std::string& logging_function, const std::st
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
// Log conditionally, prefixing the output with the passed category name and severity level.
|
||||||
#define LogPrintLevel(category, level, ...) \
|
#define LogPrintLevel(category, level, ...) \
|
||||||
do { \
|
do { \
|
||||||
if (LogAcceptCategory((category), (level))) { \
|
if (LogAcceptCategory((category), (level))) { \
|
||||||
|
@ -103,6 +103,7 @@ BOOST_FIXTURE_TEST_CASE(logging_LogPrintMacros, LogSetup)
|
|||||||
LogPrintLevel(BCLog::NET, BCLog::Level::Info, "foo8: %s\n", "bar8");
|
LogPrintLevel(BCLog::NET, BCLog::Level::Info, "foo8: %s\n", "bar8");
|
||||||
LogPrintLevel(BCLog::NET, BCLog::Level::Warning, "foo9: %s\n", "bar9");
|
LogPrintLevel(BCLog::NET, BCLog::Level::Warning, "foo9: %s\n", "bar9");
|
||||||
LogPrintLevel(BCLog::NET, BCLog::Level::Error, "foo10: %s\n", "bar10");
|
LogPrintLevel(BCLog::NET, BCLog::Level::Error, "foo10: %s\n", "bar10");
|
||||||
|
LogPrintfCategory(BCLog::VALIDATION, "foo11: %s\n", "bar11");
|
||||||
std::ifstream file{tmp_log_path};
|
std::ifstream file{tmp_log_path};
|
||||||
std::vector<std::string> log_lines;
|
std::vector<std::string> log_lines;
|
||||||
for (std::string log; std::getline(file, log);) {
|
for (std::string log; std::getline(file, log);) {
|
||||||
@ -114,7 +115,9 @@ BOOST_FIXTURE_TEST_CASE(logging_LogPrintMacros, LogSetup)
|
|||||||
"[net:debug] foo7: bar7",
|
"[net:debug] foo7: bar7",
|
||||||
"[net:info] foo8: bar8",
|
"[net:info] foo8: bar8",
|
||||||
"[net:warning] foo9: bar9",
|
"[net:warning] foo9: bar9",
|
||||||
"[net:error] foo10: bar10"};
|
"[net:error] foo10: bar10",
|
||||||
|
"[validation] foo11: bar11",
|
||||||
|
};
|
||||||
BOOST_CHECK_EQUAL_COLLECTIONS(log_lines.begin(), log_lines.end(), expected.begin(), expected.end());
|
BOOST_CHECK_EQUAL_COLLECTIONS(log_lines.begin(), log_lines.end(), expected.begin(), expected.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ FUNCTION_NAMES_AND_NUMBER_OF_LEADING_ARGUMENTS = [
|
|||||||
'LogConnectFailure,1',
|
'LogConnectFailure,1',
|
||||||
'LogPrint,1',
|
'LogPrint,1',
|
||||||
'LogPrintf,0',
|
'LogPrintf,0',
|
||||||
|
'LogPrintfCategory,1',
|
||||||
'LogPrintLevel,2',
|
'LogPrintLevel,2',
|
||||||
'printf,0',
|
'printf,0',
|
||||||
'snprintf,2',
|
'snprintf,2',
|
||||||
|
@ -16,12 +16,12 @@ from subprocess import check_output
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
logs_list = check_output(["git", "grep", "--extended-regexp", r"(LogPrintLevel|LogPrintf?)\(", "--", "*.cpp"], universal_newlines=True, encoding="utf8").splitlines()
|
logs_list = check_output(["git", "grep", "--extended-regexp", r"(LogPrintLevel|LogPrintfCategory|LogPrintf?)\(", "--", "*.cpp"], universal_newlines=True, encoding="utf8").splitlines()
|
||||||
|
|
||||||
unterminated_logs = [line for line in logs_list if not re.search(r'(\\n"|/\* Continued \*/)', line)]
|
unterminated_logs = [line for line in logs_list if not re.search(r'(\\n"|/\* Continued \*/)', line)]
|
||||||
|
|
||||||
if unterminated_logs != []:
|
if unterminated_logs != []:
|
||||||
print("All calls to LogPrintf(), LogPrint(), LogPrintLevel(), and WalletLogPrintf() should be terminated with \"\\n\".")
|
print("All calls to LogPrintf(), LogPrintfCategory(), LogPrint(), LogPrintLevel(), and WalletLogPrintf() should be terminated with \"\\n\".")
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
for line in unterminated_logs:
|
for line in unterminated_logs:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user