Skip to content

Commit b7b76c0

Browse files
committed
templatize loggerlevelconfigure
Signed-off-by: Koichi <koichi.imai.2@tier4.jp>
1 parent 336c6b6 commit b7b76c0

3 files changed

Lines changed: 54 additions & 71 deletions

File tree

autoware_utils_logging/CMakeLists.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@ project(autoware_utils_logging)
44
find_package(autoware_cmake REQUIRED)
55
autoware_package()
66

7-
ament_auto_add_library(${PROJECT_NAME} SHARED
8-
"src/logger_level_configure.cpp"
9-
)
10-
117
if(BUILD_TESTING)
128
ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
139
"test/main.cpp"
1410
"test/cases/logger_level_configure.cpp"
1511
)
16-
target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME})
12+
target_include_directories(test_${PROJECT_NAME} PRIVATE include)
13+
ament_target_dependencies(test_${PROJECT_NAME} rclcpp logging_demo)
1714
endif()
1815

1916
ament_auto_package()

autoware_utils_logging/include/autoware_utils_logging/logger_level_configure.hpp

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,74 @@
4444
#include <logging_demo/srv/config_logger.hpp>
4545
#include <rclcpp/rclcpp.hpp>
4646

47+
#include <rcutils/logging.h>
48+
49+
#include <functional>
50+
#include <string>
51+
#include <utility>
52+
4753
namespace autoware_utils_logging
4854
{
4955

50-
class LoggerLevelConfigure
56+
template <typename NodeT = rclcpp::Node>
57+
class BasicLoggerLevelConfigure
5158
{
5259
private:
5360
using ConfigLogger = logging_demo::srv::ConfigLogger;
61+
using CallbackT = std::function<void(
62+
ConfigLogger::Request::SharedPtr, ConfigLogger::Response::SharedPtr)>;
63+
using ServicePtr = decltype(std::declval<NodeT *>()->template create_service<ConfigLogger>(
64+
std::declval<std::string>(), std::declval<CallbackT>()));
5465

5566
public:
56-
explicit LoggerLevelConfigure(rclcpp::Node * node);
67+
explicit BasicLoggerLevelConfigure(NodeT * node) : ros_logger_(node->get_logger())
68+
{
69+
using std::placeholders::_1;
70+
using std::placeholders::_2;
71+
72+
srv_config_logger_ = node->template create_service<ConfigLogger>(
73+
"~/config_logger",
74+
std::bind(&BasicLoggerLevelConfigure::on_logger_config_service, this, _1, _2));
75+
}
5776

5877
private:
5978
rclcpp::Logger ros_logger_;
60-
rclcpp::Service<ConfigLogger>::SharedPtr srv_config_logger_;
79+
ServicePtr srv_config_logger_;
6180

6281
void on_logger_config_service(
6382
const ConfigLogger::Request::SharedPtr request,
64-
const ConfigLogger::Response::SharedPtr response);
83+
const ConfigLogger::Response::SharedPtr response)
84+
{
85+
int logging_severity;
86+
const auto ret_level = rcutils_logging_severity_level_from_string(
87+
request->level.c_str(), rcl_get_default_allocator(), &logging_severity);
88+
89+
if (ret_level != RCUTILS_RET_OK) {
90+
response->success = false;
91+
RCLCPP_WARN_STREAM(
92+
ros_logger_, "Failed to change logger level for "
93+
<< request->logger_name
94+
<< " due to an invalid logging severity: " << request->level);
95+
return;
96+
}
97+
98+
const auto ret_set =
99+
rcutils_logging_set_logger_level(request->logger_name.c_str(), logging_severity);
100+
101+
if (ret_set != RCUTILS_RET_OK) {
102+
response->success = false;
103+
RCLCPP_WARN_STREAM(ros_logger_, "Failed to set logger level for " << request->logger_name);
104+
return;
105+
}
106+
107+
response->success = true;
108+
RCLCPP_INFO_STREAM(
109+
ros_logger_, "Logger level [" << request->level << "] is set for " << request->logger_name);
110+
}
65111
};
66112

113+
using LoggerLevelConfigure = BasicLoggerLevelConfigure<rclcpp::Node>;
114+
67115
} // namespace autoware_utils_logging
68116

69117
#endif // AUTOWARE_UTILS_LOGGING__LOGGER_LEVEL_CONFIGURE_HPP_

autoware_utils_logging/src/logger_level_configure.cpp

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)