ros2 / rcl

Library to support implementation of language specific ROS Client Libraries.
Apache License 2.0
128 stars 162 forks source link

[FR] select the logger implementation without rebuilding #1178

Open fujitatomoya opened 3 weeks ago

fujitatomoya commented 3 weeks ago

Feature request

Feature description

Currently there is no way to select the logging backend without building rcl. This is because that when building rcl, we must choose the logging implementation to be used.

In default rcl_logging_spdlog is selected if RCL_LOGGING_IMPLEMENTATION is not set. But we can change it with RCL_LOGGING_IMPLEMENTATION and available logging backend library.

e.g rcl_logging_noop

export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
colcon build --symlink-install --cmake-clean-cache --packages-select rcl_logging_noop rcl

and, no log files are generated with rcl_logging_noop

root@tomoyafujita:~/ros2_ws/colcon_ws# ros2 run demo_nodes_cpp talker
[INFO] [1724349615.489636579] [talker]: Publishing: 'Hello World: 1'
[INFO] [1724349616.489588912] [talker]: Publishing: 'Hello World: 2'
[INFO] [1724349617.489610598] [talker]: Publishing: 'Hello World: 3'
[INFO] [1724349618.489512697] [talker]: Publishing: 'Hello World: 4'
...
root@tomoyafujita:~/.ros/log# ls

This generates the constraint that whole system needs to use only specified logging backend in this workspace. It would be nice if we can build the logger backend libraries, and select the logging backend when the program starts.

Implementation considerations

Current related code is,

https://github.com/ros2/rcl/blob/dcfe9ba4f95e3c0d546d30b3f03b769df16667a1/rcl/cmake/get_default_rcl_logging_implementation.cmake#L26-L34

Probably we can escalate RCL_LOGGING_IMPLEMENTATION like how RMW_IMPLEMENTATION works to select the rmw implementation when executing programs.

clalancette commented 3 weeks ago

I'll state upfront that I'm not against this feature.

But are there any practical uses for it? While I think that our logging subsystem has a number of problems, swapping out the disk logging backend at runtime doesn't seem to be one of them. So I'd like to hear about a practical use before we spend time on it.

fujitatomoya commented 3 weeks ago

@clalancette

the use case (not production yet) that i have off the top of my head, to support 2 (or multiple) logger backend in the same system.

note: i am spending a couple of days for rcl_logging_syslog (forwarded to FluentBit), so i can share more details about this. I think i can disclose the source code with some documentation in this weekend. (or hopefully today 😄 )

fujitatomoya commented 3 weeks ago

@clalancette i developed some PoC based on syslog and support FluentBit, please see overview https://github.com/fujitatomoya/rcl_logging_syslog