From a40ab0982d54291d0f07f5097a06be438e88118a Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 21 Jun 2017 01:00:09 +0100 Subject: Add wrapper for creating a logger based on a template argument/type --- icetray/icetray/logger.cpp | 9 +++++++++ icetray/icetray/logger.h | 5 +++++ icetray/unittests/testIceTrayLogger.cpp | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/icetray/icetray/logger.cpp b/icetray/icetray/logger.cpp index 6afe4d8..5e17af5 100644 --- a/icetray/icetray/logger.cpp +++ b/icetray/icetray/logger.cpp @@ -93,6 +93,15 @@ namespace IceTray { return logs.end(); } + LoggerPtr + LogManager::getLogger(const std::type_info & type) + { + std::unique_ptr res { + abi::__cxa_demangle(type.name(), NULL, NULL, NULL), std::free + }; + return getLogger(res.get()); + } + LoggerPtr LogManager::getLogger(const std::string & domain) { diff --git a/icetray/icetray/logger.h b/icetray/icetray/logger.h index 339f7eb..e78a126 100644 --- a/icetray/icetray/logger.h +++ b/icetray/icetray/logger.h @@ -71,6 +71,11 @@ namespace IceTray { class DLL_PUBLIC LogManager { public: + template + LoggerPtr getLogger() { + return getLogger(typeid(T)); + } + LoggerPtr getLogger(const std::type_info &); LoggerPtr getLogger(const std::string &); LogLevelWriters getLogsForDomain(const std::string &) const; void addWriter(LogWriterPrx writer); diff --git a/icetray/unittests/testIceTrayLogger.cpp b/icetray/unittests/testIceTrayLogger.cpp index e7eb0fc..f051a58 100644 --- a/icetray/unittests/testIceTrayLogger.cpp +++ b/icetray/unittests/testIceTrayLogger.cpp @@ -281,5 +281,12 @@ BOOST_AUTO_TEST_CASE( getLogger ) ic->destroy(); } +BOOST_AUTO_TEST_CASE( getLoggerForType ) +{ + auto logger = LOGMANAGER()->getLogger(); + BOOST_REQUIRE(logger); + BOOST_REQUIRE_EQUAL("IceTray::Service", logger->getDomain()); +} + BOOST_AUTO_TEST_SUITE_END(); -- cgit v1.2.3