X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBasics%2FlibSALOMELog.cxx;h=a662bfef4059ee920e9d21091a7f99e68bca148a;hb=1bbffef73eeeb5b2a14d8fc7bdf91affdafae664;hp=cfaaeada518c6e6651d0fffe746f98d1d5064208;hpb=01fb5e19b0cc6f25c64be7bf96fa35676609a4e7;p=modules%2Fkernel.git diff --git a/src/Basics/libSALOMELog.cxx b/src/Basics/libSALOMELog.cxx index cfaaeada5..a662bfef4 100644 --- a/src/Basics/libSALOMELog.cxx +++ b/src/Basics/libSALOMELog.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -26,9 +26,72 @@ #include #include +#include + +enum class VerbosityMode { undefined, nolog, withlog }; + +static VerbosityMode isActivated = VerbosityMode::undefined; namespace SALOME { + static constexpr char ERROR_LEVEL_VALUE = 0; + static constexpr char ERROR_LEVEL_VALUE_STR[] = "ERROR"; + static constexpr char WARNING_LEVEL_VALUE = 1; + static constexpr char WARNING_LEVEL_VALUE_STR[] = "WARNING"; + static constexpr char INFO_LEVEL_VALUE = 2; + static constexpr char INFO_LEVEL_VALUE_STR[] = "INFO"; + static constexpr char DEBUG_LEVEL_VALUE = 7; + static constexpr char DEBUG_LEVEL_VALUE_STR[] = "DEBUG"; + static constexpr char UNDEFINED_LEVEL_VALUE=99; + + enum class VerbosityLevelType { error_level=ERROR_LEVEL_VALUE, warning_level=WARNING_LEVEL_VALUE, info_level=INFO_LEVEL_VALUE, debug_level=DEBUG_LEVEL_VALUE, undefined_level=UNDEFINED_LEVEL_VALUE }; + static VerbosityLevelType verbosityLevel = VerbosityLevelType::undefined_level; + + static VerbosityLevelType FromIntToVerbosityLevel(char value) + { + switch(value) + { + case ERROR_LEVEL_VALUE: + return VerbosityLevelType::error_level; + case WARNING_LEVEL_VALUE: + return VerbosityLevelType::warning_level; + case INFO_LEVEL_VALUE: + return VerbosityLevelType::info_level; + case DEBUG_LEVEL_VALUE: + return VerbosityLevelType::debug_level; + } + throw std::range_error("FromIntToVerbosityLevel : Invalid value for verbosity level !"); + } + + static VerbosityLevelType FromStrToVerbosityLevel(const std::string& val) + { + if(val == ERROR_LEVEL_VALUE_STR) + return VerbosityLevelType::error_level; + if(val == WARNING_LEVEL_VALUE_STR) + return VerbosityLevelType::warning_level; + if(val == INFO_LEVEL_VALUE_STR) + return VerbosityLevelType::info_level; + if(val == DEBUG_LEVEL_VALUE_STR) + return VerbosityLevelType::debug_level; + throw std::range_error("FromStrToVerbosityLevel : Invalid str value for verbosity level !"); + } + + static std::string FromVerbosityLevelToStr(VerbosityLevelType level) + { + switch(level) + { + case VerbosityLevelType::error_level: + return std::string(ERROR_LEVEL_VALUE_STR); + case VerbosityLevelType::warning_level: + return std::string(WARNING_LEVEL_VALUE_STR); + case VerbosityLevelType::info_level: + return std::string(INFO_LEVEL_VALUE_STR); + case VerbosityLevelType::debug_level: + return std::string(DEBUG_LEVEL_VALUE_STR); + default: + throw std::range_error("FromVerbosityLevelToStr : not managed verbosity level !"); + } + } // ============================================================================ /*! @@ -43,27 +106,78 @@ namespace SALOME bool VerbosityActivated() { - auto isEnvVarSet = []() -> bool + auto isEnvVarSet = []() -> VerbosityMode { - const char* envVar = std::getenv("SALOME_VERBOSE"); + const char *envVar = std::getenv("SALOME_VERBOSE"); if (envVar && (envVar[0] != '\0')) { - try - { - const long long numValue = std::stoll(envVar); - return numValue > 0; - } - catch(const std::exception& e) - { - std::cerr << e.what() << '\n'; - } + const int numValue = std::stoi(envVar); + return numValue > 0?VerbosityMode::withlog:VerbosityMode::nolog; } - return false; + return VerbosityMode::nolog; + }; + + if(isActivated == VerbosityMode::undefined) + isActivated = isEnvVarSet(); + return isActivated == VerbosityMode::withlog; + } + + void SetVerbosityActivated(bool flag) + { + isActivated = flag ? VerbosityMode::withlog:VerbosityMode::nolog; + } + + VerbosityLevelType VerbosityLevel() + { + auto isEnvVarSet = []() -> VerbosityLevelType + { + const char *envVar = std::getenv("SALOME_VERBOSE_LEVEL"); + if (envVar && (envVar[0] != '\0')) + { + const int numValue = std::stoi(envVar); + return FromIntToVerbosityLevel( static_cast(numValue) ); + } + return VerbosityLevelType::info_level; }; + if(verbosityLevel == VerbosityLevelType::undefined_level) + verbosityLevel = isEnvVarSet(); + return verbosityLevel; + } + + void SetVerbosityLevel(VerbosityLevelType level) + { + verbosityLevel = level; + } + + void SetVerbosityLevelStr(const std::string& level) + { + verbosityLevel = FromStrToVerbosityLevel(level); + } - static const bool isActivated = isEnvVarSet(); - return isActivated; + std::string VerbosityLevelStr() + { + return FromVerbosityLevelToStr( VerbosityLevel() ); + } + + bool IsDebugLevel() + { + return VerbosityLevel() >= VerbosityLevelType::debug_level; + } + + bool IsInfoLevel() + { + return VerbosityLevel() >= VerbosityLevelType::info_level; + } + + bool IsWarningLevel() + { + return VerbosityLevel() >= VerbosityLevelType::warning_level; + } + + bool IsErrorLevel() + { + return VerbosityLevel() >= VerbosityLevelType::error_level; } }