From 3ddc9fc106adc990e8e96cc6fdbbdfdea405f1cc Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 12 Jan 2021 18:01:05 -0300 Subject: [PATCH 1/2] Revert "Revert "Add get_logging_directory method to rclcpp::Logger (#1509)" (#1511)" This reverts commit 438822fe13b8d13033fc6d9acf30894ea365bd75. Signed-off-by: Ivan Santiago Paunovic --- rclcpp/include/rclcpp/logger.hpp | 18 ++++++++++++++++++ rclcpp/src/rclcpp/logger.cpp | 16 ++++++++++++++++ rclcpp/test/rclcpp/test_logger.cpp | 21 +++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/rclcpp/include/rclcpp/logger.hpp b/rclcpp/include/rclcpp/logger.hpp index bca473c42c..ed022c473a 100644 --- a/rclcpp/include/rclcpp/logger.hpp +++ b/rclcpp/include/rclcpp/logger.hpp @@ -22,6 +22,12 @@ #include "rcl/node.h" #include "rcutils/logging.h" +#ifdef _WIN32 +# ifndef NOMINMAX +# define NOMINMAX +# endif +#endif +#include "rcpputils/filesystem_helper.hpp" /** * \def RCLCPP_LOGGING_ENABLED @@ -75,6 +81,18 @@ RCLCPP_PUBLIC Logger get_node_logger(const rcl_node_t * node); +/// Get the current logging directory. +/** + * For more details of how the logging directory is determined, + * see \ref rcl_logging_get_logging_directory. + * + * \returns the logging directory being used. + * \throws rclcpp::exceptions::RCLError if an unexpected error occurs. + */ +RCLCPP_PUBLIC +rcpputils::fs::path +get_logging_directory(); + class Logger { public: diff --git a/rclcpp/src/rclcpp/logger.cpp b/rclcpp/src/rclcpp/logger.cpp index af65b84623..b58edd4c80 100644 --- a/rclcpp/src/rclcpp/logger.cpp +++ b/rclcpp/src/rclcpp/logger.cpp @@ -14,6 +14,8 @@ #include +#include "rcl_logging_interface/rcl_logging_interface.h" + #include "rclcpp/exceptions.hpp" #include "rclcpp/logger.hpp" #include "rclcpp/logging.hpp" @@ -46,6 +48,20 @@ get_node_logger(const rcl_node_t * node) return rclcpp::get_logger(logger_name); } +rcpputils::fs::path +get_logging_directory() +{ + char * log_dir = NULL; + auto allocator = rcutils_get_default_allocator(); + rcl_logging_ret_t ret = rcl_logging_get_logging_directory(allocator, &log_dir); + if (RCL_LOGGING_RET_OK != ret) { + rclcpp::exceptions::throw_from_rcl_error(ret); + } + std::string path{log_dir}; + allocator.deallocate(log_dir, allocator.state); + return path; +} + void Logger::set_level(Level level) { diff --git a/rclcpp/test/rclcpp/test_logger.cpp b/rclcpp/test/rclcpp/test_logger.cpp index b83a2d4037..1869b8f478 100644 --- a/rclcpp/test/rclcpp/test_logger.cpp +++ b/rclcpp/test/rclcpp/test_logger.cpp @@ -17,6 +17,8 @@ #include #include +#include "rcutils/env.h" + #include "rclcpp/logger.hpp" #include "rclcpp/logging.hpp" #include "rclcpp/node.hpp" @@ -157,3 +159,22 @@ TEST(TestLogger, set_level) { rcutils_logging_set_output_handler(previous_output_handler); EXPECT_EQ(RCUTILS_RET_OK, rcutils_logging_shutdown()); } + +TEST(TestLogger, get_logging_directory) { + ASSERT_EQ(true, rcutils_set_env("HOME", "/fake_home_dir")); + ASSERT_EQ(true, rcutils_set_env("USERPROFILE", nullptr)); + ASSERT_EQ(true, rcutils_set_env("ROS_LOG_DIR", nullptr)); + ASSERT_EQ(true, rcutils_set_env("ROS_HOME", nullptr)); + + auto path = rclcpp::get_logging_directory(); + auto expected_path = rcpputils::fs::path{"/fake_home_dir"} / ".ros" / "log"; + + // TODO(ivanpauno): Add operator== to rcpputils::fs::path + auto it = path.cbegin(); + auto eit = expected_path.cbegin(); + for (; it != path.cend() && eit != expected_path.cend(); ++it, ++eit) { + EXPECT_EQ(*eit, *it); + } + EXPECT_EQ(it, path.cend()); + EXPECT_EQ(eit, expected_path.cend()); +} From 439e9f3ffea187b64c70a541d27a852b3e58592f Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 12 Jan 2021 18:38:17 -0300 Subject: [PATCH 2/2] delete now unneeded NOMINMAX define Signed-off-by: Ivan Santiago Paunovic --- rclcpp/include/rclcpp/logger.hpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/rclcpp/include/rclcpp/logger.hpp b/rclcpp/include/rclcpp/logger.hpp index ed022c473a..e1ab4945f3 100644 --- a/rclcpp/include/rclcpp/logger.hpp +++ b/rclcpp/include/rclcpp/logger.hpp @@ -22,11 +22,6 @@ #include "rcl/node.h" #include "rcutils/logging.h" -#ifdef _WIN32 -# ifndef NOMINMAX -# define NOMINMAX -# endif -#endif #include "rcpputils/filesystem_helper.hpp" /**