From 660ef07f4f3221f8129924c32b4249241d6d1ed9 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 16 Jun 2017 21:07:56 +0100 Subject: Add support for getting the lowest configured log domain for a writer --- icetray/icetray/icetrayService.cpp | 4 +++- icetray/icetray/logWriter.ice | 1 + icetray/icetray/logger.cpp | 13 +++++++++++++ icetray/icetray/logger.h | 1 + icetray/unittests/testIceTrayLogger.cpp | 12 ++++++++++++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/icetray/icetray/icetrayService.cpp b/icetray/icetray/icetrayService.cpp index d540d7a..f04a200 100644 --- a/icetray/icetray/icetrayService.cpp +++ b/icetray/icetray/icetrayService.cpp @@ -31,7 +31,9 @@ namespace IceTray { adp = ic->createObjectAdapter(name); for (auto logWriterFactory : AdHoc::PluginManager::getDefault()->getAll()) { auto logWriter = logWriterFactory->implementation()->create(ic->getProperties().get()); - logManager.addWriter(Logging::LogWriterPrx::uncheckedCast(adp->addWithUUID(logWriter))); + if (logWriter->lowestLevel()) { + logManager.addWriter(Logging::LogWriterPrx::uncheckedCast(adp->addWithUUID(logWriter))); + } } addObjects(name, ic, args, adp); adp->activate(); diff --git a/icetray/icetray/logWriter.ice b/icetray/icetray/logWriter.ice index 141d8c3..3d68f64 100644 --- a/icetray/icetray/logWriter.ice +++ b/icetray/icetray/logWriter.ice @@ -16,6 +16,7 @@ module IceTray { }; interface LogWriter { + optional(0) LogLevel lowestLevel(); optional(0) LogLevel level(string domain); void message(LogLevel level, string domain, string message); }; diff --git a/icetray/icetray/logger.cpp b/icetray/icetray/logger.cpp index aac966a..62ab79b 100644 --- a/icetray/icetray/logger.cpp +++ b/icetray/icetray/logger.cpp @@ -165,6 +165,19 @@ namespace IceTray { } } + // This is "low-level" e.g. DEBUG, as opposed to lowest enumeration value. + IceUtil::Optional + AbstractLogWriter::lowestLevel(const Ice::Current &) + { + IceUtil::Optional lowest; + for (const auto & d : logDomains) { + if (!lowest || d.second > *lowest) { + lowest = d.second; + } + } + return lowest; + } + IceUtil::Optional AbstractLogWriter::level(const std::string & domain, const Ice::Current &) { diff --git a/icetray/icetray/logger.h b/icetray/icetray/logger.h index c435644..1cbbdc9 100644 --- a/icetray/icetray/logger.h +++ b/icetray/icetray/logger.h @@ -82,6 +82,7 @@ namespace IceTray { class DLL_PUBLIC AbstractLogWriter : public LogWriter { public: + IceUtil::Optional lowestLevel(const Ice::Current &) override; IceUtil::Optional level(const std::string &, const Ice::Current &) override; protected: diff --git a/icetray/unittests/testIceTrayLogger.cpp b/icetray/unittests/testIceTrayLogger.cpp index e1a62a5..dfd5ae2 100644 --- a/icetray/unittests/testIceTrayLogger.cpp +++ b/icetray/unittests/testIceTrayLogger.cpp @@ -182,6 +182,7 @@ BOOST_AUTO_TEST_CASE( domains_none ) auto l = add(new TestLogWriter()); BOOST_REQUIRE(!l->level("test")); BOOST_REQUIRE(!l->level("test.domain")); + BOOST_REQUIRE(!l->lowestLevel()); } BOOST_AUTO_TEST_CASE( domains_single ) @@ -190,6 +191,8 @@ BOOST_AUTO_TEST_CASE( domains_single ) auto l = add(new TestLogWriter(ERR)); BOOST_REQUIRE_EQUAL(ERR, *l->level("test")); BOOST_REQUIRE_EQUAL(ERR, *l->level("test.domain")); + BOOST_REQUIRE(l->lowestLevel()); + BOOST_REQUIRE_EQUAL(ERR, *l->lowestLevel()); } BOOST_AUTO_TEST_CASE( domains_fromNullProperties ) @@ -198,6 +201,8 @@ BOOST_AUTO_TEST_CASE( domains_fromNullProperties ) auto l = add(new TestLogWriter("", Ice::PropertiesPtr())); BOOST_REQUIRE_EQUAL(WARNING, *l->level("test")); BOOST_REQUIRE_EQUAL(WARNING, *l->level("test.domain")); + BOOST_REQUIRE(l->lowestLevel()); + BOOST_REQUIRE_EQUAL(WARNING, *l->lowestLevel()); } BOOST_AUTO_TEST_CASE( domains_fromProperties ) @@ -213,6 +218,8 @@ BOOST_AUTO_TEST_CASE( domains_fromProperties ) BOOST_REQUIRE_EQUAL(WARNING, *l->level("other")); BOOST_REQUIRE_EQUAL(EMERG, *l->level("test.domain")); BOOST_REQUIRE_EQUAL(DEBUG, *l->level("test.debug")); + BOOST_REQUIRE(l->lowestLevel()); + BOOST_REQUIRE_EQUAL(DEBUG, *l->lowestLevel()); } BOOST_AUTO_TEST_CASE( domains_fromProperties_noDefault ) @@ -224,6 +231,8 @@ BOOST_AUTO_TEST_CASE( domains_fromProperties_noDefault ) auto l = add(new TestLogWriter("TestLogWriter", p)); BOOST_REQUIRE_EQUAL(EMERG, *l->level("test.domain")); BOOST_REQUIRE_EQUAL(DEBUG, *l->level("test.debug")); + BOOST_REQUIRE(l->lowestLevel()); + BOOST_REQUIRE_EQUAL(DEBUG, *l->lowestLevel()); } BOOST_AUTO_TEST_CASE( domains_fromProperties_onlyDefault ) @@ -236,6 +245,8 @@ BOOST_AUTO_TEST_CASE( domains_fromProperties_onlyDefault ) BOOST_REQUIRE_EQUAL(INFO, *l->level("other")); BOOST_REQUIRE_EQUAL(INFO, *l->level("test.domain")); BOOST_REQUIRE_EQUAL(INFO, *l->level("test.debug")); + BOOST_REQUIRE(l->lowestLevel()); + BOOST_REQUIRE_EQUAL(INFO, *l->lowestLevel()); } BOOST_AUTO_TEST_CASE( domains_fromProperties_badLevel ) @@ -262,6 +273,7 @@ BOOST_AUTO_TEST_CASE( getLogger ) { auto ic = Ice::initialize(); ic->getProperties()->setProperty("test.Endpoints", "default"); + ic->getProperties()->setProperty("TestLogWriter.default", "INFO"); this->start("test", ic, {}); auto logger = LOGMANAGER()->getLogger("test.domain"); BOOST_REQUIRE(logger); -- cgit v1.2.3