Skip to content

Commit 6135c49

Browse files
mergify[bot]nadavelkabetsahcorde
authored
Feature: add logger_name property to subscription, publisher, service and client (backport #1471) (#1476)
Signed-off-by: Alejandro Hernandez Cordero <[email protected]> Co-authored-by: Nadav Elkabets <[email protected]> Co-authored-by: Alejandro Hernandez Cordero <[email protected]>
1 parent 7f768b2 commit 6135c49

File tree

11 files changed

+103
-2
lines changed

11 files changed

+103
-2
lines changed

rclpy/rclpy/client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,9 @@ def handle(self):
185185

186186
def destroy(self):
187187
self.__client.destroy_when_not_in_use()
188+
189+
@property
190+
def logger_name(self) -> str:
191+
"""Get the name of the logger associated with the node of the client."""
192+
with self.handle:
193+
return self.__client.get_logger_name()

rclpy/rclpy/publisher.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ def topic_name(self) -> str:
8787
def handle(self):
8888
return self.__publisher
8989

90+
@property
91+
def logger_name(self) -> str:
92+
"""Get the name of the logger associated with the node of the publisher."""
93+
with self.handle:
94+
return self.__publisher.get_logger_name()
95+
9096
def destroy(self):
9197
for handler in self.event_handlers:
9298
handler.destroy()

rclpy/rclpy/service.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,11 @@ def send_response(self, response: SrvTypeResponse, header) -> None:
8383
def handle(self):
8484
return self.__service
8585

86+
@property
87+
def logger_name(self) -> str:
88+
"""Get the name of the logger associated with the node of the service."""
89+
with self.handle:
90+
return self.__service.get_logger_name()
91+
8692
def destroy(self):
8793
self.__service.destroy_when_not_in_use()

rclpy/rclpy/subscription.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,9 @@ def destroy(self):
8383
def topic_name(self):
8484
with self.handle:
8585
return self.__subscription.get_topic_name()
86+
87+
@property
88+
def logger_name(self) -> str:
89+
"""Get the name of the logger associated with the node of the subscription."""
90+
with self.handle:
91+
return self.__subscription.get_logger_name()

rclpy/src/rclpy/client.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,17 @@ Client::take_response(py::object pyresponse_type)
146146
return result_tuple;
147147
}
148148

149+
const char *
150+
Client::get_logger_name() const
151+
{
152+
const char * node_logger_name = rcl_node_get_logger_name(node_.rcl_ptr());
153+
if (!node_logger_name) {
154+
throw RCLError("Node logger name not set");
155+
}
156+
157+
return node_logger_name;
158+
}
159+
149160
void
150161
define_client(py::object module)
151162
{
@@ -164,6 +175,9 @@ define_client(py::object module)
164175
"Return true if the service server is available")
165176
.def(
166177
"take_response", &Client::take_response,
167-
"Take a received response from an earlier request");
178+
"Take a received response from an earlier request")
179+
.def(
180+
"get_logger_name", &Client::get_logger_name,
181+
"Get the name of the logger associated with the node of the client.");
168182
}
169183
} // namespace rclpy

rclpy/src/rclpy/client.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,15 @@ class Client : public Destroyable, public std::enable_shared_from_this<Client>
9090
void
9191
destroy() override;
9292

93+
/// Get the name of the logger associated with the node of the client.
94+
/**
95+
*
96+
* \return logger_name, or
97+
* \return None on failure
98+
*/
99+
const char *
100+
get_logger_name() const;
101+
93102
private:
94103
Node node_;
95104
std::shared_ptr<rcl_client_t> rcl_client_;

rclpy/src/rclpy/service.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,17 @@ Service::get_qos_profile()
153153
return rclpy::convert_to_qos_dict(&options->qos);
154154
}
155155

156+
const char *
157+
Service::get_logger_name() const
158+
{
159+
const char * node_logger_name = rcl_node_get_logger_name(node_.rcl_ptr());
160+
if (!node_logger_name) {
161+
throw RCLError("Node logger name not set");
162+
}
163+
164+
return node_logger_name;
165+
}
166+
156167
void
157168
define_service(py::object module)
158169
{
@@ -174,6 +185,9 @@ define_service(py::object module)
174185
"Send a response")
175186
.def(
176187
"service_take_request", &Service::service_take_request,
177-
"Take a request from a given service");
188+
"Take a request from a given service")
189+
.def(
190+
"get_logger_name", &Service::get_logger_name,
191+
"Get the name of the logger associated with the node of the service.");
178192
}
179193
} // namespace rclpy

rclpy/src/rclpy/service.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ class Service : public Destroyable, public std::enable_shared_from_this<Service>
9494
const char *
9595
get_service_name();
9696

97+
/// Get the name of the logger associated with the node of the service.
98+
/**
99+
*
100+
* \return logger_name, or
101+
* \return None on failure
102+
*/
103+
const char *
104+
get_logger_name() const;
105+
97106
/// Get the QoS profile for this service.
98107
py::dict
99108
get_qos_profile();

rclpy/test/test_client.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ def test_different_type_raises(self):
136136
self.node.destroy_client(cli)
137137
self.node.destroy_service(srv)
138138

139+
def test_logger_name_is_equal_to_node_name(self) -> None:
140+
cli = self.node.create_client(GetParameters, 'get/parameters')
141+
self.assertEqual(cli.logger_name, 'TestClient')
142+
self.node.destroy_client(cli)
143+
139144

140145
if __name__ == '__main__':
141146
unittest.main()

rclpy/test/test_publisher.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ def test_wait_for_all_acked(self):
125125
pub.destroy()
126126
sub.destroy()
127127

128+
def test_logger_name_is_equal_to_node_name(self) -> None:
129+
pub = self.node.create_publisher(BasicTypes, TEST_TOPIC, 10)
130+
self.assertEqual(pub.logger_name, 'node')
131+
pub.destroy()
132+
128133

129134
if __name__ == '__main__':
130135
unittest.main()

0 commit comments

Comments
 (0)