# wiesel / src / common / wiesel / util / log.h

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 /** * Copyright (C) 2012 * Christian Fischer * * https://bitbucket.org/baldur/wiesel/ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA */ #ifndef __WIESEL_UTIL_LOG_H__ #define __WIESEL_UTIL_LOG_H__ #include #include #include namespace wiesel { /// define the default log tag #ifndef WIESEL_LOG_TAG #define WIESEL_LOG_TAG "wiesel" #endif /** * @brief definitions of different logging levels. */ enum LogLevel { LogLevel_None, LogLevel_Error, LogLevel_Warning, LogLevel_Info, LogLevel_Debug, }; /** * @brief write a single log message to the output console, if the current log level is high enough. * @param level The current log level. */ WIESEL_COMMON_EXPORT int logmsg(LogLevel level, const char *tag, const char *message, ...) #if defined(__GNUC__) __attribute__ ((format(printf, 3, 4))) #endif ; /** * @brief A Log class for logging messages using a std::ostream derived class. */ class WIESEL_COMMON_EXPORT Log : public std::basic_ostream< char, std::char_traits > { public: Log(std::basic_streambuf > *buffer); virtual ~Log(); public: static WIESEL_COMMON_EXPORT Log err; //!< error log level for critical error messages. static WIESEL_COMMON_EXPORT Log warn; //!< warning log level for minor errors and warnings. static WIESEL_COMMON_EXPORT Log info; //!< info log level for simple program information. static WIESEL_COMMON_EXPORT Log debug; //!< detailed log level for detailed program information, not relevant for productive usage. /** * @brief set the current \ref LogLevel. * All messages with a higher level than the currently configured level will be discarded. */ static WIESEL_COMMON_EXPORT void setLevel(LogLevel level); /** * @brief get the current \ref LogLevel. */ static inline LogLevel getLevel() { return current_log_level; } /** * @brief checks, if a specific combination of log tag and \ref LogLevel will be included in the log messages. */ static WIESEL_COMMON_EXPORT bool isLogged(LogLevel level, const char *tag); /** * @brief checks, if a specific combination of log tag and \ref LogLevel will be included in the log messages. */ inline static bool isLogged(LogLevel level, const std::string &tag) { return isLogged(level, tag.c_str()); } private: static WIESEL_COMMON_EXPORT LogLevel current_log_level; }; } /* namespace wiesel */ #endif /* __WIESEL_UTIL_LOG_H__ */