31 #ifndef OPENVDB_UTIL_LOGGING_HAS_BEEN_INCLUDED 32 #define OPENVDB_UTIL_LOGGING_HAS_BEEN_INCLUDED 34 #ifdef OPENVDB_USE_LOG4CPLUS 36 #include <openvdb/version.h> 37 #include <log4cplus/appender.h> 38 #include <log4cplus/configurator.h> 39 #include <log4cplus/consoleappender.h> 40 #include <log4cplus/layout.h> 41 #include <log4cplus/logger.h> 42 #include <log4cplus/spi/loggingevent.h> 58 Debug = log4cplus::DEBUG_LOG_LEVEL,
59 Info = log4cplus::INFO_LOG_LEVEL,
60 Warn = log4cplus::WARN_LOG_LEVEL,
61 Error = log4cplus::ERROR_LOG_LEVEL,
62 Fatal = log4cplus::FATAL_LOG_LEVEL
74 : log4cplus::PatternLayout(
75 progName_.empty() ? std::string{
"%5p: %m%n"} : (progName_ +
" %5p: %m%n"))
77 , mProgName(progName_)
83 const std::string&
progName()
const {
return mProgName; }
86 const log4cplus::spi::InternalLoggingEvent& event)
override 89 log4cplus::PatternLayout::formatAndAppend(strm, event);
92 log4cplus::tostringstream s;
93 switch (event.getLogLevel()) {
94 case log4cplus::DEBUG_LOG_LEVEL: s <<
"\033[32m";
break;
95 case log4cplus::ERROR_LOG_LEVEL:
96 case log4cplus::FATAL_LOG_LEVEL: s <<
"\033[31m";
break;
97 case log4cplus::INFO_LOG_LEVEL: s <<
"\033[36m";
break;
98 case log4cplus::WARN_LOG_LEVEL: s <<
"\033[35m";
break;
100 log4cplus::PatternLayout::formatAndAppend(s, event);
101 strm << s.str() <<
"\033[0m" << std::flush;
107 #pragma warning disable:1478 108 #elif defined(__clang__) 109 #pragma clang diagnostic push 110 #pragma clang diagnostic ignored "-Wdeprecated-declarations" 111 #elif defined(__GNUC__) 112 #pragma GCC diagnostic push 113 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 116 #if defined(LOG4CPLUS_VERSION) && defined(LOG4CPLUS_MAKE_VERSION) 117 #if LOG4CPLUS_VERSION >= LOG4CPLUS_MAKE_VERSION(2, 0, 0) 119 using Ptr = std::unique_ptr<log4cplus::Layout>;
121 using Ptr = std::auto_ptr<log4cplus::Layout>;
124 using Ptr = std::auto_ptr<log4cplus::Layout>;
127 static Ptr create(
const std::string& progName_,
bool useColor =
true)
134 #elif defined(__clang__) 135 #pragma clang diagnostic pop 136 #elif defined(__GNUC__) 137 #pragma GCC diagnostic pop 141 bool mUseColor =
true;
142 std::string mProgName;
146 inline log4cplus::Logger
149 return log4cplus::Logger::getInstance(LOG4CPLUS_TEXT(
"openvdb"));
153 inline log4cplus::SharedAppenderPtr
156 return getLogger().getAppender(LOG4CPLUS_TEXT(
"OPENVDB"));
167 case log4cplus::DEBUG_LOG_LEVEL:
return Level::Debug;
168 case log4cplus::INFO_LOG_LEVEL:
return Level::Info;
169 case log4cplus::WARN_LOG_LEVEL:
return Level::Warn;
170 case log4cplus::ERROR_LOG_LEVEL:
return Level::Error;
171 case log4cplus::FATAL_LOG_LEVEL:
break;
191 for (
int i = 1; i < argc; ++i) {
192 const std::string arg{argv[i]};
194 if (arg ==
"-debug") {
setLevel(Level::Debug); }
195 else if (arg ==
"-error") {
setLevel(Level::Error); }
196 else if (arg ==
"-fatal") {
setLevel(Level::Fatal); }
197 else if (arg ==
"-info") {
setLevel(Level::Info); }
198 else if (arg ==
"-warn") {
setLevel(Level::Warn); }
199 else {
remove =
false; }
200 if (
remove) argv[i] =
nullptr;
202 auto end = std::remove(argv + 1, argv + argc,
nullptr);
203 argc =
static_cast<int>(end - argv);
214 appender->setLayout(internal::ColoredPatternLayout::create(progName, useColor));
232 logger.setAdditivity(
false);
235 if (
auto appender = log4cplus::SharedAppenderPtr{
new log4cplus::ConsoleAppender}) {
236 appender->setName(LOG4CPLUS_TEXT(
"OPENVDB"));
237 logger.addAppender(appender);
256 auto progName = (argc > 0 ? argv[0] :
"");
257 if (
const char* ptr = ::strrchr(progName,
'/')) progName = ptr + 1;
266 #define OPENVDB_LOG(level, message) \ 268 auto _log = openvdb::logging::internal::getLogger(); \ 269 if (_log.isEnabledFor(log4cplus::level##_LOG_LEVEL)) { \ 270 std::ostringstream _buf; \ 272 _log.forcedLog(log4cplus::level##_LOG_LEVEL, _buf.str(), __FILE__, __LINE__); \ 277 #define OPENVDB_LOG_INFO(message) OPENVDB_LOG(INFO, message) 278 #define OPENVDB_LOG_WARN(message) OPENVDB_LOG(WARN, message) 280 #define OPENVDB_LOG_ERROR(message) OPENVDB_LOG(ERROR, message) 282 #define OPENVDB_LOG_FATAL(message) OPENVDB_LOG(FATAL, message) 285 #define OPENVDB_LOG_DEBUG(message) OPENVDB_LOG(DEBUG, message) 288 #define OPENVDB_LOG_DEBUG(message) 291 #define OPENVDB_LOG_DEBUG_RUNTIME(message) OPENVDB_LOG(DEBUG, message) 295 #else // ifdef OPENVDB_USE_LOG4CPLUS 299 #define OPENVDB_LOG_INFO(mesg) 300 #define OPENVDB_LOG_WARN(mesg) do { std::cerr << "WARNING: " << mesg << std::endl; } while (0); 301 #define OPENVDB_LOG_ERROR(mesg) do { std::cerr << "ERROR: " << mesg << std::endl; } while (0); 302 #define OPENVDB_LOG_FATAL(mesg) do { std::cerr << "FATAL: " << mesg << std::endl; } while (0); 303 #define OPENVDB_LOG_DEBUG(mesg) 304 #define OPENVDB_LOG_DEBUG_RUNTIME(mesg) 311 enum class Level { Debug, Info, Warn, Error, Fatal };
315 inline void setLevel(
int&,
char*[]) {}
318 inline void initialize(
int&,
char*[],
bool =
true) {}
324 #endif // OPENVDB_USE_LOG4CPLUS 345 #endif // OPENVDB_UTIL_LOGGING_HAS_BEEN_INCLUDED void setProgramName(const std::string &progName, bool useColor=true)
Specify a program name to be displayed in log messages.
Definition: logging.h:209
Level
Message severity level.
Definition: logging.h:57
std::auto_ptr< log4cplus::Layout > Ptr
Definition: logging.h:124
log4cplus::Logger getLogger()
Definition: logging.h:147
void initialize(int &argc, char *argv[], bool useColor=true)
Initialize the logging system from command-line arguments.
Definition: logging.h:250
log4cplus layout that outputs text in different colors for different log levels, using ANSI escape co...
Definition: logging.h:70
Level getLevel()
Return the current logging level.
Definition: logging.h:164
log4cplus::SharedAppenderPtr getAppender()
Definition: logging.h:154
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:136
void setLevel(int &argc, char *argv[])
If "-debug", "-info", "-warn", "-error" or "-fatal" is found in the given array of command-line argum...
Definition: logging.h:189
A LevelScope object sets the logging level to a given level and restores it to the current level when...
Definition: logging.h:334
Definition: Exceptions.h:39
const std::string & progName() const
Definition: logging.h:83
void formatAndAppend(log4cplus::tostream &strm, const log4cplus::spi::InternalLoggingEvent &event) override
Definition: logging.h:85
~LevelScope()
Definition: logging.h:338
LevelScope(Level newLevel)
Definition: logging.h:337
static Ptr create(const std::string &progName_, bool useColor=true)
Definition: logging.h:127
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:188
Level level
Definition: logging.h:336
ColoredPatternLayout(const std::string &progName_, bool useColor=true)
Definition: logging.h:73
~ColoredPatternLayout() override
Definition: logging.h:81