|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |
Launch files
Messages
Services
Plugins
Recent questions tagged rcl_logging_implementation at Robotics Stack Exchange
|
rcl_logging_implementation package from rcl_logging reporcl_logging_implementation rcl_logging_interface rcl_logging_noop rcl_logging_spdlog |
ROS Distro
|
Package Summary
| Version | 3.4.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/ros2/rcl_logging.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-01-28 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tomoya Fujita
Authors
- Tomoya Fujita
rcl_logging_implementation
Overview
The rcl_logging_implementation package provides dynamic loading capabilities for rcl logging implementations, similar to how rmw_implementation works for middleware layers.
This allows users to switch logging backends at runtime without rebuilding rcl.
[!NOTE] This package is only used when dynamic loading is enabled at build time. When RCL is built with a specific logging implementation (e.g.,
rcl_logging_spdlog), it links directly to that implementation without this abstraction layer, eliminating function call overhead.
Features
-
Dynamic Loading: Load logging implementations (e.g.,
rcl_logging_spdlog,rcl_logging_noop) at runtime -
Runtime Configuration: Use
RCL_LOGGING_IMPLEMENTATIONenvironment variable to select implementation -
Fallback Default: Defaults to
rcl_logging_spdlogif no implementation is specified
Architecture
Dynamic Loading (Default)
When rcl is built without specifying RCL_LOGGING_IMPLEMENTATION, it uses this package for runtime selection:
rcl application
↓
rcl (core library)
↓
rcl_logging_implementation (this package) ← Dynamic loading happens here
├─ Runtime Loading → rcl_logging_spdlog
├─ Runtime Loading → rcl_logging_noop
└─ Runtime Loading → custom implementations
Static Linking (Opt-in)
When rcl is built with RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog, it bypasses this package entirely:
rcl application
↓
rcl (core library)
↓
rcl_logging_spdlog ← Direct link, no abstraction layer
See more details for basic design.
Usage
Runtime Configuration (Dynamic Loading)
Set the RCL_LOGGING_IMPLEMENTATION environment variable to select a logging implementation at runtime:
# Use spdlog (default)
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
ros2 run my_package my_node
# Use noop
export RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
ros2 run my_package my_node
# Use custom implementation
export RCL_LOGGING_IMPLEMENTATION=my_custom_logging
ros2 run my_package my_node
If not set, the implementation defaults to rcl_logging_spdlog that you can also set via DEFAULT_RCL_LOGGING_IMPLEMENTATION.
# Set the default to noop (still allows runtime override via environment variable)
colcon build --packages-select rcl_logging_implementation --cmake-args -DDEFAULT_RCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Build-Time Configuration (Static Linking)
For applications that require static linking (e.g., embedded systems, strict deployment requirements), configure rcl at build time to link directly to a specific implementation:
# Build RCL with static linking to spdlog (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_spdlog
# Build RCL with static linking to noop (bypasses rcl_logging_implementation)
colcon build --packages-select rcl --cmake-args -DRCL_LOGGING_IMPLEMENTATION=rcl_logging_noop
Changelog for package rcl_logging_implementation
3.4.0 (2026-01-28)
-
update rcl_logging_implementation architecture diagram. (#137)
-
rcl logging implementation (#135)
- 1st draft bring-up for rcl_logging_implementation package.
- add test_logging_implementation to check dynamic loading.
- address Copilot review comments.
- fix: correct visibility macro for DLL export in CMakeLists.txt
- add visibility control with RCL_LOGGING_IMPLEMENTATION_DEFAULT_VISIBILITY.
- load the all symbols at the initialization.
- Use goto pattern to eliminate the cleanup duplication.
- Add basic design doc of rmw_logging_implementation.
- use RCPPUTILS_SCOPE_EXIT instead of goto statement.
- logging visibility macro was incorrect.
* logging symbols stay until the peocess actually exits. ---------Co-authored-by: Barry Xu <<barry.xu@sony.com>>
-
Contributors: Tomoya Fujita
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| rcl_logging_spdlog | |
| ament_lint_auto | |
| ament_lint_common | |
| rcl_logging_noop | |
| rcl_logging_interface | |
| rcpputils | |
| rcutils |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| rcl |