Ver Fonte

Reserve the logger name "" as the default logger.

Sam Jaffe há 5 anos atrás
pai
commit
7a43c8ff58
3 ficheiros alterados com 22 adições e 10 exclusões
  1. 2 5
      include/logger/log_manager.h
  2. 3 4
      src/log_manager.cxx
  3. 17 1
      test/log_manager_test.cxx

+ 2 - 5
include/logger/log_manager.h

@@ -39,12 +39,9 @@ namespace logging {
      * Functions to construct logger handles for use. When providing an unknown
      * logger name, the default logger_impl will be used instead (with the given
      * name wrapped around it).
-     * TODO: Make it so I can use name = "" instead...
      */
-    logger get();
-    logger get(std::string const & name);
-    c_logger c_get();
-    c_logger c_get(std::string const & name);
+    logger get(std::string const & name = "");
+    c_logger c_get(std::string const & name = "");
 
     void configure(properties const & props);
 

+ 3 - 4
src/log_manager.cxx

@@ -104,6 +104,9 @@ void manager_impl::configure_appenders(properties const & props) {
 
 void manager_impl::configure_loggers(properties const & props) {
   for (auto & log : props["loggers"].object()) {
+    if (log.first.empty()) {
+      throw invalid_property("Cannot define logger without a name");
+    }
     auto plog = get_logger(log.second["appenders"]);
     inject_log_level(log.second, *plog);
     loggers[log.first] = plog;
@@ -115,14 +118,10 @@ manager::manager() : pimpl_(new manager_impl) {}
 
 manager::~manager() {}
 
-logger manager::get() { return logger("", pimpl_->default_logger); }
-
 logger manager::get(std::string const & name) {
   return logger(name, pimpl_->logger_for(name));
 }
 
-c_logger manager::c_get() { return c_logger("", pimpl_->default_logger); }
-
 c_logger manager::c_get(std::string const & name) {
   return c_logger(name, pimpl_->logger_for(name));
 }

+ 17 - 1
test/log_manager_test.cxx

@@ -74,7 +74,7 @@ TEST_F(LogManagerTest, IfNoLayoutIsProvidedThenWeUseTheDefault) {
   EXPECT_THAT(layout, testing::IsNull());
 }
 
-TEST_F(LogManagerTest, WillThrowIfSchemaError) {
+TEST_F(LogManagerTest, WillThrowAppenderIsStringType) {
   using namespace logging::property;
   // clang-format off
   properties const BAD_SCHEMA = _obj({
@@ -91,6 +91,22 @@ TEST_F(LogManagerTest, WillThrowIfSchemaError) {
   EXPECT_THROW(manager().configure(BAD_SCHEMA), invalid_property_type);
 }
 
+TEST_F(LogManagerTest, WillThrowIfDefiningEmptyStringLogger) {
+  using namespace logging::property;
+  // clang-format off
+  properties const BAD_SCHEMA = _obj({
+    {"configuration", _obj({
+      {"loggers", _obj({
+        {"", _obj({
+        })}
+      })},
+      {"appenders", _obj({})}
+    })}
+  });
+  // clang-format on
+  EXPECT_THROW(manager().configure(BAD_SCHEMA), invalid_property);
+}
+
 using ::testing::_;
 using ::testing::AnyNumber;