-
Notifications
You must be signed in to change notification settings - Fork 412
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Providing logging macro signature that accepts std::string #573
Changes from 1 commit
9a99a84
953db7a
6a0a6c7
2339df5
6683c47
1fb433f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,6 +21,7 @@ | |
|
||
#include "rclcpp/logger.hpp" | ||
#include "rcutils/logging_macros.h" | ||
#include "rclcpp/utilities.hpp" | ||
|
||
// These are used for compiling out logging macros lower than a minimum severity. | ||
#define RCLCPP_LOG_MIN_SEVERITY_DEBUG 0 | ||
|
@@ -30,6 +31,9 @@ | |
#define RCLCPP_LOG_MIN_SEVERITY_FATAL 4 | ||
#define RCLCPP_LOG_MIN_SEVERITY_NONE 5 | ||
|
||
#define FIRST_ARG(N, ...) N | ||
#define ALL_BUT_FIRST_ARGS(N, ...) , ##__VA_ARGS__ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you please prefix these with There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
|
||
/** | ||
* \def RCLCPP_LOG_MIN_SEVERITY | ||
* Define RCLCPP_LOG_MIN_SEVERITY=RCLCPP_LOG_MIN_SEVERITY_[DEBUG|INFO|WARN|ERROR|FATAL] | ||
|
@@ -94,7 +98,7 @@ def is_supported_feature_combination(feature_combination): | |
@(''.join([' ' + p + ', \\\n' for p in params]))@ | ||
@[ end if]@ | ||
logger.get_name(), \ | ||
__VA_ARGS__) | ||
rclcpp::get_c_string(FIRST_ARG(__VA_ARGS__, "")) ALL_BUT_FIRST_ARGS(__VA_ARGS__,"")) | ||
|
||
@[ end for]@ | ||
#endif | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -92,6 +92,14 @@ TEST_F(TestLoggingMacros, test_logging_named) { | |
EXPECT_EQ("message 3", g_last_log_event.message); | ||
} | ||
|
||
TEST_F(TestLoggingMacros, test_logging_string) { | ||
for (std::string i : {"one", "two", "three"}) { | ||
RCLCPP_DEBUG(g_logger, "message " + i); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you add at least one test case that uses multiple arguments, so that the "all but first argument" style macros are being exercised? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have added new tests, with more than one argument, but I understand that possible uses are:
but never:
Only first argument is possible to be a string. If I am wrong, let me know, because I am not really sure if this can happen... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That looks right to me, the documentation as it stands is that the first string is a format string (which may have no format arguments) and the rest of the arguments are input for the format string: http://docs.ros2.org/bouncy/api/rclcpp/logging_8hpp.html#a44818c8a1fd292cd0e81759e956765d7 |
||
} | ||
EXPECT_EQ(3u, g_log_calls); | ||
EXPECT_EQ("message three", g_last_log_event.message); | ||
} | ||
|
||
TEST_F(TestLoggingMacros, test_logging_once) { | ||
for (int i : {1, 2, 3}) { | ||
RCLCPP_INFO_ONCE(g_logger, "message %d", i); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you just need
RCLCPP_PUBLIC
on each of these functions.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added
RCLCPP_PUBLIC
toget_c_string
functions. I didn't know that it was necessary for Windows. I use only Linux :S . I hope it works with these changes.I also documented both functions and macros.