diff options
| -rw-r--r-- | icetray/icetray/icetrayService.cpp | 4 | ||||
| -rw-r--r-- | icetray/icetray/logWriter.ice | 1 | ||||
| -rw-r--r-- | icetray/icetray/logger.cpp | 13 | ||||
| -rw-r--r-- | icetray/icetray/logger.h | 1 | ||||
| -rw-r--r-- | icetray/unittests/testIceTrayLogger.cpp | 12 | 
5 files changed, 30 insertions, 1 deletions
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<Logging::LogWriterFactory>()) {  			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<LogLevel> +		AbstractLogWriter::lowestLevel(const Ice::Current &) +		{ +			IceUtil::Optional<LogLevel> lowest; +			for (const auto & d : logDomains) { +				if (!lowest || d.second > *lowest) { +					lowest = d.second; +				} +			} +			return lowest; +		} +  		IceUtil::Optional<LogLevel>  		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<LogLevel> lowestLevel(const Ice::Current &) override;  				IceUtil::Optional<LogLevel> 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);  | 
