Compare commits

...

3 Commits

Author SHA1 Message Date
Alexey Rybalchenko
8446c6db0c Update docs 2020-06-18 11:30:34 +02:00
Alexey Rybalchenko
a0ff4eba50 Fixes for the updated severity order 2020-06-18 10:56:00 +02:00
David Rohr
cfe0f9dc53 Suppress LOG messages with debug severity or less at compile time for release builds 2020-06-18 10:56:00 +02:00
3 changed files with 105 additions and 75 deletions

View File

@@ -42,7 +42,7 @@ If FairLogger is built with `-DUSE_BOOST_PRETTY_FUNCTION=ON` and/or `-DUSE_EXTER
```cmake ```cmake
find_package(FairLogger) find_package(FairLogger)
foreach(dep IN LISTS FairLogger_PACKAGE_DEPENDENCIES) foreach(dep IN LISTS FairLogger_PACKAGE_DEPENDENCIES)
find_package(${dep} ${FairLogger_${dep}_VERSION}) find_package(${dep} ${FairLogger_${dep}_VERSION})
endforeach() endforeach()
``` ```
@@ -87,21 +87,32 @@ where severity level is one of the following:
```C++ ```C++
"nolog", "nolog",
"fatal",
"error",
"warn",
"state",
"info",
"debug",
"debug1",
"debug2",
"debug3",
"debug4",
"trace", "trace",
"debug4",
"debug3",
"debug2",
"debug1",
"debug",
"info",
"state",
"warn",
"error",
"fatal",
``` ```
Logger will log the chosen severity and all above it (except "nolog", which deactivates logging for that sink completely). Fatal severity is always logged. Logger will log the chosen severity and all above it (except "nolog", which deactivates logging for that sink completely). Fatal severity is always logged.
## 3.1 Compile-time severity switch
The minimum severity level can be configured at compile time via definition of `FAIR_MIN_SEVERITY`:
```C++
#define FAIR_MIN_SEVERITY warn // only allow severities >= warn
#include <fairlogger/Logger.h>
```
When `FAIR_MIN_SEVERITY` is not provided, it will be set to `info` if `NDEBUG` is defined, otherwise all severities will be enabled.
## 4. Verbosity ## 4. Verbosity
The log verbosity is controlled via: The log verbosity is controlled via:
@@ -213,14 +224,14 @@ By default, `<fairlogger/Logger.h>` defines unprefixed macros: `LOG`, `LOGV`, `L
Define an option `FAIR_NO_LOG*` to prevent the above unprefixed macros to be defined, e.g. Define an option `FAIR_NO_LOG*` to prevent the above unprefixed macros to be defined, e.g.
\```cpp ```C++
#define FAIR_NO_LOG #define FAIR_NO_LOG
#define FAIR_NO_LOGF #define FAIR_NO_LOGF
#include <fairlogger/Logger.h> #include <fairlogger/Logger.h>
\``` ```
## License ## License
GNU Lesser General Public Licence (LGPL) version 3, see [LICENSE](LICENSE). GNU Lesser General Public Licence (LGPL) version 3, see [LICENSE](LICENSE).
Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH Copyright (C) 2017-2020 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH

View File

@@ -112,17 +112,17 @@ const array<string, 12> Logger::fSeverityNames =
{ {
{ {
"NOLOG", "NOLOG",
"FATAL", "TRACE",
"ERROR",
"WARN",
"STATE",
"INFO",
"DEBUG",
"DEBUG1",
"DEBUG2",
"DEBUG3",
"DEBUG4", "DEBUG4",
"TRACE" "DEBUG3",
"DEBUG2",
"DEBUG1",
"DEBUG",
"INFO",
"STATE",
"WARN",
"ERROR",
"FATAL"
} }
}; };
@@ -425,25 +425,26 @@ void Logger::CycleVerbosityDown()
void Logger::UpdateMinSeverity() void Logger::UpdateMinSeverity()
{ {
fMinSeverity = (fConsoleSeverity <= fFileSeverity) ? fFileSeverity : fConsoleSeverity; if (fFileSeverity == Severity::nolog) {
fMinSeverity = fConsoleSeverity;
} else {
fMinSeverity = std::min(fConsoleSeverity, fFileSeverity);
}
for (auto& it : fCustomSinks) { for (auto& it : fCustomSinks) {
if (fMinSeverity <= it.second.first) { if (fMinSeverity == Severity::nolog) {
fMinSeverity = it.second.first; fMinSeverity = std::max(fMinSeverity, it.second.first);
} else if (it.second.first != Severity::nolog) {
fMinSeverity = std::min(fMinSeverity, it.second.first);
} }
} }
} }
bool Logger::Logging(Severity severity) bool Logger::Logging(Severity severity)
{ {
if (Severity::fatal == severity) { return (severity >= fMinSeverity &&
return true; fMinSeverity > Severity::nolog) ||
} severity == Severity::fatal;
if (severity <= fMinSeverity && severity > Severity::nolog) {
return true;
} else {
return false;
}
} }
bool Logger::Logging(const string& severityStr) bool Logger::Logging(const string& severityStr)
@@ -548,22 +549,22 @@ void Logger::RemoveFileSink()
bool Logger::LoggingToConsole() const bool Logger::LoggingToConsole() const
{ {
return (fInfos.severity <= fConsoleSeverity && return (fInfos.severity >= fConsoleSeverity &&
fInfos.severity > Severity::nolog) || fConsoleSeverity > Severity::nolog) ||
fInfos.severity == Severity::fatal; fInfos.severity == Severity::fatal;
} }
bool Logger::LoggingToFile() const bool Logger::LoggingToFile() const
{ {
return (fInfos.severity <= fFileSeverity && return (fInfos.severity >= fFileSeverity &&
fInfos.severity > Severity::nolog) || fFileSeverity > Severity::nolog) ||
fInfos.severity == Severity::fatal; fInfos.severity == Severity::fatal;
} }
bool Logger::LoggingCustom(const Severity severity) const bool Logger::LoggingCustom(const Severity severity) const
{ {
return (fInfos.severity <= severity && return (fInfos.severity >= severity &&
fInfos.severity > Severity::nolog) || severity > Severity::nolog) ||
fInfos.severity == Severity::fatal; fInfos.severity == Severity::fatal;
} }

View File

@@ -13,6 +13,10 @@
#warning "The symbol 'DEBUG' is used in FairRoot Logger. undefining..." #warning "The symbol 'DEBUG' is used in FairRoot Logger. undefining..."
#endif #endif
#if !defined(FAIR_MIN_SEVERITY) && defined(NDEBUG)
#define FAIR_MIN_SEVERITY info
#endif
#ifdef FAIRLOGGER_USE_BOOST_PRETTY_FUNCTION #ifdef FAIRLOGGER_USE_BOOST_PRETTY_FUNCTION
#include <boost/current_function.hpp> #include <boost/current_function.hpp>
#endif #endif
@@ -46,33 +50,33 @@ namespace fair
enum class Severity : int enum class Severity : int
{ {
nolog, nolog = 0,
fatal, trace = 1,
error, debug4 = 2,
warn, debug3 = 3,
state, debug2 = 4,
info, debug1 = 5,
debug, debug = 6,
debug1, info = 7,
debug2, state = 8,
debug3, warn = 9,
debug4, error = 10,
trace, fatal = 11,
// backwards-compatibility: // backwards-compatibility:
NOLOG = nolog, NOLOG = nolog,
FATAL = fatal, TRACE = trace,
ERROR = error,
WARN = warn,
warning = warn,
WARNING = warn,
STATE = state,
INFO = info,
DEBUG = debug,
DEBUG1 = debug1,
DEBUG2 = debug2,
DEBUG3 = debug3,
DEBUG4 = debug4, DEBUG4 = debug4,
TRACE = trace DEBUG3 = debug3,
DEBUG2 = debug2,
DEBUG1 = debug1,
DEBUG = debug,
INFO = info,
STATE = state,
WARNING = warn,
warning = warn,
WARN = warn,
ERROR = error,
FATAL = fatal
}; };
// verbosity levels: // verbosity levels:
@@ -313,6 +317,15 @@ class Logger
static bool fIsDestructed; static bool fIsDestructed;
static struct DestructionHelper { ~DestructionHelper() { Logger::fIsDestructed = true; }} fDestructionHelper; static struct DestructionHelper { ~DestructionHelper() { Logger::fIsDestructed = true; }} fDestructionHelper;
static bool constexpr SuppressSeverity(Severity sev)
{
#ifdef FAIR_MIN_SEVERITY
return sev < Severity::FAIR_MIN_SEVERITY;
#else
return false;
#endif
}
private: private:
LogMetaData fInfos; LogMetaData fInfos;
@@ -394,11 +407,13 @@ class Logger
// Log line if the provided severity is below or equals the configured one // Log line if the provided severity is below or equals the configured one
#define FAIR_LOG(severity) \ #define FAIR_LOG(severity) \
if (fair::Logger::SuppressSeverity(fair::Severity::severity)) ; else \
for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(fair::Severity::severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \ for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(fair::Severity::severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \
fair::Logger(fair::Severity::severity, MSG_ORIGIN) fair::Logger(fair::Severity::severity, MSG_ORIGIN)
// Log line with the given verbosity if the provided severity is below or equals the configured one // Log line with the given verbosity if the provided severity is below or equals the configured one
#define FAIR_LOGV(severity, verbosity) \ #define FAIR_LOGV(severity, verbosity) \
if (fair::Logger::SuppressSeverity(fair::Severity::severity)) ; else \
for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(fair::Severity::severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \ for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(fair::Severity::severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \
fair::Logger(fair::Severity::severity, fair::Verbosity::verbosity, MSG_ORIGIN) fair::Logger(fair::Severity::severity, fair::Verbosity::verbosity, MSG_ORIGIN)
@@ -408,15 +423,18 @@ class Logger
// Log an empty line // Log an empty line
#define FAIR_LOGN(severity) \ #define FAIR_LOGN(severity) \
if (fair::Logger::SuppressSeverity(fair::Severity::severity)) ; else \
for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(fair::Severity::severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \ for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(fair::Severity::severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \
fair::Logger(fair::Severity::severity, fair::Verbosity::verylow, MSG_ORIGIN).LogEmptyLine() fair::Logger(fair::Severity::severity, fair::Verbosity::verylow, MSG_ORIGIN).LogEmptyLine()
// Log with custom file, line, function // Log with custom file, line, function
#define FAIR_LOGD(severity, file, line, f) \ #define FAIR_LOGD(severity, file, line, f) \
if (fair::Logger::SuppressSeverity(severity)) ; else \
for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \ for (bool fairLOggerunLikelyvariable = false; fair::Logger::Logging(severity) && !fairLOggerunLikelyvariable; fairLOggerunLikelyvariable = true) \
fair::Logger(severity, file, line, f) fair::Logger(severity, file, line, f)
#define FAIR_LOG_IF(severity, condition) \ #define FAIR_LOG_IF(severity, condition) \
if (fair::Logger::SuppressSeverity(fair::Severity::severity)) ; else \
for (bool fairLOggerunLikelyvariable2 = false; condition && !fairLOggerunLikelyvariable2; fairLOggerunLikelyvariable2 = true) \ for (bool fairLOggerunLikelyvariable2 = false; condition && !fairLOggerunLikelyvariable2; fairLOggerunLikelyvariable2 = true) \
LOG(severity) LOG(severity)