ROS 2 rclcpp + rcl - kilted  kilted
ROS 2 C++ Client Library with ROS Client Library
node_logging.cpp
1 // Copyright 2017 Open Source Robotics Foundation, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "rclcpp/node_impl.hpp"
16 #include "rclcpp/node_interfaces/node_logging.hpp"
17 #include "rclcpp/node_interfaces/node_services_interface.hpp"
18 
20 
21 NodeLogging::NodeLogging(rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base)
22 : node_base_(node_base)
23 {
24  logger_ = rclcpp::get_logger(NodeLogging::get_logger_name());
25 }
26 
27 NodeLogging::~NodeLogging()
28 {
29 }
30 
33 {
34  return logger_;
35 }
36 
37 const char *
39 {
40  return rcl_node_get_logger_name(node_base_->get_rcl_node_handle());
41 }
42 
44  node_interfaces::NodeServicesInterface::SharedPtr node_services)
45 {
46  rclcpp::ServicesQoS qos_profile;
47  const std::string node_name = node_base_->get_name();
48  auto callback_group = node_base_->get_default_callback_group();
49 
50  get_loggers_service_ = rclcpp::create_service<rcl_interfaces::srv::GetLoggerLevels>(
51  node_base_, node_services,
52  node_name + "/get_logger_levels",
53  [](
54  const std::shared_ptr<rmw_request_id_t>,
55  const std::shared_ptr<rcl_interfaces::srv::GetLoggerLevels::Request> request,
56  std::shared_ptr<rcl_interfaces::srv::GetLoggerLevels::Response> response)
57  {
58  for (auto & name : request->names) {
59  rcl_interfaces::msg::LoggerLevel logger_level;
60  logger_level.name = name;
61  auto ret = rcutils_logging_get_logger_level(name.c_str());
62  if (ret < 0) {
63  logger_level.level = 0;
64  } else {
65  logger_level.level = static_cast<uint8_t>(ret);
66  }
67  response->levels.push_back(std::move(logger_level));
68  }
69  },
70  qos_profile, callback_group);
71 
72  set_loggers_service_ = rclcpp::create_service<rcl_interfaces::srv::SetLoggerLevels>(
73  node_base_, node_services,
74  node_name + "/set_logger_levels",
75  [](
76  const std::shared_ptr<rmw_request_id_t>,
77  const std::shared_ptr<rcl_interfaces::srv::SetLoggerLevels::Request> request,
78  std::shared_ptr<rcl_interfaces::srv::SetLoggerLevels::Response> response)
79  {
80  rcl_interfaces::msg::SetLoggerLevelsResult result;
81  for (auto & level : request->levels) {
82  auto ret = rcutils_logging_set_logger_level(level.name.c_str(), level.level);
83  if (ret != RCUTILS_RET_OK) {
84  result.successful = false;
85  result.reason = rcutils_get_error_string().str;
86  } else {
87  result.successful = true;
88  }
89  response->results.push_back(std::move(result));
90  }
91  },
92  qos_profile, callback_group);
93 }
Implementation of the NodeLogging part of the Node API.
RCLCPP_PUBLIC const char * get_logger_name() const override
Return the logger name associated with the node.
RCLCPP_PUBLIC void create_logger_services(node_interfaces::NodeServicesInterface::SharedPtr node_services) override
create logger services
RCLCPP_PUBLIC rclcpp::Logger get_logger() const override
Return the logger of the node.
RCLCPP_PUBLIC Logger get_logger(const std::string &name)
Return a named logger.
Definition: logger.cpp:34
RCL_PUBLIC RCL_WARN_UNUSED const char * rcl_node_get_logger_name(const rcl_node_t *node)
Return the logger name of the node.
Definition: node.c:485