summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--icetray/icetray/icetrayService.cpp4
-rw-r--r--icetray/icetray/logWriter.ice1
-rw-r--r--icetray/icetray/logger.cpp13
-rw-r--r--icetray/icetray/logger.h1
-rw-r--r--icetray/unittests/testIceTrayLogger.cpp12
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);