From 09ede1bf1f2ad5410ec4b3721f7a8386f877496a Mon Sep 17 00:00:00 2001 From: SchoenleAndi Date: Wed, 19 Oct 2016 13:17:46 +0200 Subject: [PATCH 1/6] add loglevels to upstream master only --- src/g3log/loglevels.hpp | 1 + src/loglevels.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/g3log/loglevels.hpp b/src/g3log/loglevels.hpp index 7aaf495..ade36d6 100644 --- a/src/g3log/loglevels.hpp +++ b/src/g3log/loglevels.hpp @@ -115,6 +115,7 @@ namespace g3 { namespace only_change_at_initialization { // Enable/Disable a log level {DEBUG,INFO,WARNING,FATAL} void setLogLevel(LEVELS level, bool enabled_status); + void addLogLevel(LEVELS log_level); std::string printLevels(); void reset(); diff --git a/src/loglevels.cpp b/src/loglevels.cpp index 01a5713..1d94346 100644 --- a/src/loglevels.cpp +++ b/src/loglevels.cpp @@ -40,7 +40,8 @@ namespace g3 { } #ifdef G3_DYNAMIC_LOGGING - std::map g_log_level_status = {{g3::kDebugValue, true}, {INFO.value, true}, {WARNING.value, true}, {FATAL.value, true}}; + std::map g_default_log_level_status = {{g3::kDebugValue, true}, {INFO.value, true}, {WARNING.value, true}, {FATAL.value, true}}; + std::map g_log_level_status(g_default_log_level_status); #endif } // internal @@ -51,6 +52,11 @@ namespace g3 { internal::g_log_level_status[level].get().store(enabled, std::memory_order_release); } + void addLogLevel(LEVELS log_level) { + internal::g_default_log_level_status[log_level.value].get().store(true, std::memory_order_release); + internal::g_log_level_status[log_level.value].get().store(true, std::memory_order_release); + } + std::string printLevels() { std::string levels; for (auto& v : internal::g_log_level_status) { @@ -61,7 +67,7 @@ namespace g3 { void reset() { internal::g_log_level_status.clear(); - internal::g_log_level_status = std::map{{g3::kDebugValue, true}, {INFO.value, true}, {WARNING.value, true}, {FATAL.value, true}}; + internal::g_log_level_status = internal::g_default_log_level_status; } } // only_change_at_initialization #endif From a1748ce66bc1492a4016e916541572434faea03a Mon Sep 17 00:00:00 2001 From: SchoenleAndi Date: Mon, 5 Dec 2016 10:17:38 +0100 Subject: [PATCH 2/6] addLogLevel now plays nice with having called setLogLevel before. --- src/g3log/loglevels.hpp | 2 +- src/loglevels.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/g3log/loglevels.hpp b/src/g3log/loglevels.hpp index ade36d6..a7a9944 100644 --- a/src/g3log/loglevels.hpp +++ b/src/g3log/loglevels.hpp @@ -115,7 +115,7 @@ namespace g3 { namespace only_change_at_initialization { // Enable/Disable a log level {DEBUG,INFO,WARNING,FATAL} void setLogLevel(LEVELS level, bool enabled_status); - void addLogLevel(LEVELS log_level); + void addLogLevel(LEVELS level, bool default_enabled_status = true); std::string printLevels(); void reset(); diff --git a/src/loglevels.cpp b/src/loglevels.cpp index 1d94346..9d76ab7 100644 --- a/src/loglevels.cpp +++ b/src/loglevels.cpp @@ -47,14 +47,15 @@ namespace g3 { #ifdef G3_DYNAMIC_LOGGING namespace only_change_at_initialization { - void setLogLevel(LEVELS log_level, bool enabled) { + void setLogLevel(LEVELS log_level, bool enabled_status) { int level = log_level.value; - internal::g_log_level_status[level].get().store(enabled, std::memory_order_release); + internal::g_log_level_status[level].get().store(enabled_status, std::memory_order_release); } - void addLogLevel(LEVELS log_level) { - internal::g_default_log_level_status[log_level.value].get().store(true, std::memory_order_release); - internal::g_log_level_status[log_level.value].get().store(true, std::memory_order_release); + void addLogLevel(LEVELS log_level, bool default_enabled_status) { + internal::g_default_log_level_status[log_level.value].get().store(default_enabled_status, std::memory_order_release); + if (! internal::g_log_level_status.count(log_level.value)) + setLogLevel(log_level, default_enabled_status); } std::string printLevels() { From a98b91fc5c879b8f84621893bc0d4873452e6c58 Mon Sep 17 00:00:00 2001 From: SchoenleAndi Date: Mon, 5 Dec 2016 10:48:52 +0100 Subject: [PATCH 3/6] ensure that raise(SIGTERM) is not called in test if g3log was compiled without fatal signal handler --- test_unit/test_io.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test_unit/test_io.cpp b/test_unit/test_io.cpp index 372bee4..99c0d83 100644 --- a/test_unit/test_io.cpp +++ b/test_unit/test_io.cpp @@ -311,6 +311,7 @@ TEST(LogTest, LOGF__FATAL) { EXPECT_TRUE(verifyContent(file_content, "FATAL")); } +#ifndef DISABLE_FATAL_SIGNALHANDLING TEST(LogTest, FatalSIGTERM__UsingDefaultHandler) { RestoreFileLogger logger(log_directory); @@ -383,7 +384,7 @@ TEST(LogTest, FatalSIGTERM__UsingCustomHandler) { } #endif - +#endif TEST(LogTest, LOG_preFatalLogging_hook) { { From 7d1481724cc2f1a9bc7da054e204327ee3acb380 Mon Sep 17 00:00:00 2001 From: SchoenleAndi Date: Mon, 5 Dec 2016 11:12:28 +0100 Subject: [PATCH 4/6] restore needs a flag to remove custom levels (at least the tests need to be able to do it) addLogLevel again resets the log level to the passed enable_state as even requesting the level before adding it would otherwise lead to unexpectedly not setting a "new" level to the passed state. We now assume setLogLevel is not called before addLogLevel without considering this behavior. --- src/g3log/loglevels.hpp | 4 ++-- src/loglevels.cpp | 14 +++++++------- test_unit/test_io.cpp | 12 +++++++++++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/g3log/loglevels.hpp b/src/g3log/loglevels.hpp index a7a9944..255f87f 100644 --- a/src/g3log/loglevels.hpp +++ b/src/g3log/loglevels.hpp @@ -115,9 +115,9 @@ namespace g3 { namespace only_change_at_initialization { // Enable/Disable a log level {DEBUG,INFO,WARNING,FATAL} void setLogLevel(LEVELS level, bool enabled_status); - void addLogLevel(LEVELS level, bool default_enabled_status = true); + void addLogLevel(LEVELS level, bool enabled_status = true); std::string printLevels(); - void reset(); + void reset(bool remove_custom_levels = false); } // only_change_at_initialization #endif diff --git a/src/loglevels.cpp b/src/loglevels.cpp index 9d76ab7..1f6a09f 100644 --- a/src/loglevels.cpp +++ b/src/loglevels.cpp @@ -52,10 +52,9 @@ namespace g3 { internal::g_log_level_status[level].get().store(enabled_status, std::memory_order_release); } - void addLogLevel(LEVELS log_level, bool default_enabled_status) { - internal::g_default_log_level_status[log_level.value].get().store(default_enabled_status, std::memory_order_release); - if (! internal::g_log_level_status.count(log_level.value)) - setLogLevel(log_level, default_enabled_status); + void addLogLevel(LEVELS log_level, bool enabled_status) { + internal::g_default_log_level_status[log_level.value].get().store(enabled_status, std::memory_order_release); + setLogLevel(log_level, enabled_status); } std::string printLevels() { @@ -66,9 +65,10 @@ namespace g3 { return levels; } - void reset() { - internal::g_log_level_status.clear(); - internal::g_log_level_status = internal::g_default_log_level_status; + void reset(bool remove_custom_levels) { + if (remove_custom_levels) + internal::g_default_log_level_status = { { g3::kDebugValue, true },{ INFO.value, true },{ WARNING.value, true },{ FATAL.value, true } }; + internal::g_log_level_status = internal::g_default_log_level_status; } } // only_change_at_initialization #endif diff --git a/test_unit/test_io.cpp b/test_unit/test_io.cpp index 99c0d83..3a13bc4 100644 --- a/test_unit/test_io.cpp +++ b/test_unit/test_io.cpp @@ -572,7 +572,7 @@ namespace { RestoreDynamicLoggingLevels() { }; ~RestoreDynamicLoggingLevels() { - g3::only_change_at_initialization::reset(); + g3::only_change_at_initialization::reset(true); g3::only_change_at_initialization::setLogLevel(DEBUG, false); g3::only_change_at_initialization::setLogLevel(INFO, false); g3::only_change_at_initialization::setLogLevel(WARNING, false); @@ -592,6 +592,16 @@ TEST(CustomLogLevels, AddANonFatal__ThenReset) { EXPECT_FALSE(g3::logLevel(MYINFO)); } +TEST(CustomLogLevels, AddANonFatalWithDefault__ThenReset) { + RestoreFileLogger logger(log_directory); + RestoreDynamicLoggingLevels raiiLevelRestore; + const LEVELS MYINFO{ WARNING.value + 2,{ "MY_INFO_LEVEL" } }; + EXPECT_FALSE(g3::logLevel(MYINFO)); + g3::only_change_at_initialization::addLogLevel(MYINFO, true); + EXPECT_TRUE(g3::logLevel(MYINFO)); + g3::only_change_at_initialization::reset(); + EXPECT_TRUE(g3::logLevel(MYINFO)); +} TEST(CustomLogLevels, AddANonFatal__DidNotAddItToEnabledValue1) { RestoreFileLogger logger(log_directory); From f1f216786478e75b4031042cd009f1cc0ccdfd6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nle?= Date: Mon, 5 Dec 2016 11:21:40 +0100 Subject: [PATCH 5/6] Update API.markdown Added description of addLogLevel function --- API.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/API.markdown b/API.markdown index 8a91bc8..4d0c73e 100644 --- a/API.markdown +++ b/API.markdown @@ -76,8 +76,9 @@ If the `````` evaluates to false then the the message for th const LEVELS DEADLY {FATAL.value + 1, {"DEADLY"}}; ``` +Both custom and built-in log levels can be turned on and off using the function ```g3::only_change_at_initialization::setLogLevel```. Calling ```g3::only_change_at_initialization::reset``` will reset all built-in levels to their defaults and remove custom levels. If the latter is not the desired behavior the function ```g3::only_change_at_initialization::addLogLevel``` can be used to turn a custom log level on or off and save this state as the default which is restored when ```reset()``` is called. - +Calling ```g3::only_change_at_initialization::reset(true)``` will remove all custom levels regardless of whether ```addLevel``` was used with them. ## Sink creation and utilization The default sink for g3log is the one as used in g2log. It is a simple file sink with a limited API. The details for the default file sink can be found in [filesink.hpp](src/g3log/filesink.hpp), [filesink.cpp](src/filesink.cpp), [filesinkhelper.ipp](src/filesinkhelper.ipp) From 4bd1870a76c9f87a0794026abfe45c3c5361835a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nle?= Date: Tue, 6 Dec 2016 13:55:47 +0100 Subject: [PATCH 6/6] effectively remove feature - it is almost useless. Keep the change to the unit test avoiding premature exit when fatal signal handling is not enabled in the library --- API.markdown | 3 +-- src/g3log/loglevels.hpp | 3 +-- src/loglevels.cpp | 19 ++++++------------- test_unit/test_io.cpp | 12 +----------- 4 files changed, 9 insertions(+), 28 deletions(-) diff --git a/API.markdown b/API.markdown index 4d0c73e..8a91bc8 100644 --- a/API.markdown +++ b/API.markdown @@ -76,9 +76,8 @@ If the `````` evaluates to false then the the message for th const LEVELS DEADLY {FATAL.value + 1, {"DEADLY"}}; ``` -Both custom and built-in log levels can be turned on and off using the function ```g3::only_change_at_initialization::setLogLevel```. Calling ```g3::only_change_at_initialization::reset``` will reset all built-in levels to their defaults and remove custom levels. If the latter is not the desired behavior the function ```g3::only_change_at_initialization::addLogLevel``` can be used to turn a custom log level on or off and save this state as the default which is restored when ```reset()``` is called. -Calling ```g3::only_change_at_initialization::reset(true)``` will remove all custom levels regardless of whether ```addLevel``` was used with them. + ## Sink creation and utilization The default sink for g3log is the one as used in g2log. It is a simple file sink with a limited API. The details for the default file sink can be found in [filesink.hpp](src/g3log/filesink.hpp), [filesink.cpp](src/filesink.cpp), [filesinkhelper.ipp](src/filesinkhelper.ipp) diff --git a/src/g3log/loglevels.hpp b/src/g3log/loglevels.hpp index 255f87f..7aaf495 100644 --- a/src/g3log/loglevels.hpp +++ b/src/g3log/loglevels.hpp @@ -115,9 +115,8 @@ namespace g3 { namespace only_change_at_initialization { // Enable/Disable a log level {DEBUG,INFO,WARNING,FATAL} void setLogLevel(LEVELS level, bool enabled_status); - void addLogLevel(LEVELS level, bool enabled_status = true); std::string printLevels(); - void reset(bool remove_custom_levels = false); + void reset(); } // only_change_at_initialization #endif diff --git a/src/loglevels.cpp b/src/loglevels.cpp index 1f6a09f..01a5713 100644 --- a/src/loglevels.cpp +++ b/src/loglevels.cpp @@ -40,23 +40,17 @@ namespace g3 { } #ifdef G3_DYNAMIC_LOGGING - std::map g_default_log_level_status = {{g3::kDebugValue, true}, {INFO.value, true}, {WARNING.value, true}, {FATAL.value, true}}; - std::map g_log_level_status(g_default_log_level_status); + std::map g_log_level_status = {{g3::kDebugValue, true}, {INFO.value, true}, {WARNING.value, true}, {FATAL.value, true}}; #endif } // internal #ifdef G3_DYNAMIC_LOGGING namespace only_change_at_initialization { - void setLogLevel(LEVELS log_level, bool enabled_status) { + void setLogLevel(LEVELS log_level, bool enabled) { int level = log_level.value; - internal::g_log_level_status[level].get().store(enabled_status, std::memory_order_release); + internal::g_log_level_status[level].get().store(enabled, std::memory_order_release); } - void addLogLevel(LEVELS log_level, bool enabled_status) { - internal::g_default_log_level_status[log_level.value].get().store(enabled_status, std::memory_order_release); - setLogLevel(log_level, enabled_status); - } - std::string printLevels() { std::string levels; for (auto& v : internal::g_log_level_status) { @@ -65,10 +59,9 @@ namespace g3 { return levels; } - void reset(bool remove_custom_levels) { - if (remove_custom_levels) - internal::g_default_log_level_status = { { g3::kDebugValue, true },{ INFO.value, true },{ WARNING.value, true },{ FATAL.value, true } }; - internal::g_log_level_status = internal::g_default_log_level_status; + void reset() { + internal::g_log_level_status.clear(); + internal::g_log_level_status = std::map{{g3::kDebugValue, true}, {INFO.value, true}, {WARNING.value, true}, {FATAL.value, true}}; } } // only_change_at_initialization #endif diff --git a/test_unit/test_io.cpp b/test_unit/test_io.cpp index 3a13bc4..99c0d83 100644 --- a/test_unit/test_io.cpp +++ b/test_unit/test_io.cpp @@ -572,7 +572,7 @@ namespace { RestoreDynamicLoggingLevels() { }; ~RestoreDynamicLoggingLevels() { - g3::only_change_at_initialization::reset(true); + g3::only_change_at_initialization::reset(); g3::only_change_at_initialization::setLogLevel(DEBUG, false); g3::only_change_at_initialization::setLogLevel(INFO, false); g3::only_change_at_initialization::setLogLevel(WARNING, false); @@ -592,16 +592,6 @@ TEST(CustomLogLevels, AddANonFatal__ThenReset) { EXPECT_FALSE(g3::logLevel(MYINFO)); } -TEST(CustomLogLevels, AddANonFatalWithDefault__ThenReset) { - RestoreFileLogger logger(log_directory); - RestoreDynamicLoggingLevels raiiLevelRestore; - const LEVELS MYINFO{ WARNING.value + 2,{ "MY_INFO_LEVEL" } }; - EXPECT_FALSE(g3::logLevel(MYINFO)); - g3::only_change_at_initialization::addLogLevel(MYINFO, true); - EXPECT_TRUE(g3::logLevel(MYINFO)); - g3::only_change_at_initialization::reset(); - EXPECT_TRUE(g3::logLevel(MYINFO)); -} TEST(CustomLogLevels, AddANonFatal__DidNotAddItToEnabledValue1) { RestoreFileLogger logger(log_directory);