25 enum LogLevel { LOG_FATAL = GU_LOG_FATAL,
26 LOG_ERROR = GU_LOG_ERROR,
27 LOG_WARN = GU_LOG_WARN,
28 LOG_INFO = GU_LOG_INFO,
29 LOG_DEBUG = GU_LOG_DEBUG,
31 typedef gu_log_cb_t LogCallback;
33 enum LogLevel { LOG_FATAL,
39 typedef void (*LogCallback) (int,
const char*);
49 void prepare_default ();
53 static LogLevel max_level;
54 static bool do_timestamp;
55 static LogCallback logger;
56 static void default_logger (
int,
const char*);
58 #define max_level gu_log_max_level
59 #define logger gu_log_cb
60 #define default_logger gu_log_cb_default
65 std::ostringstream os;
69 Logger(LogLevel _level = LOG_INFO) :
74 virtual ~
Logger() { logger (level, os.str().c_str()); }
76 std::ostringstream&
get(
const char* file,
80 if (default_logger == logger)
86 if (static_cast<int>(LOG_DEBUG) == static_cast<int>(max_level))
88 os << file <<
':' << func <<
"():" << line <<
": ";
94 static bool no_log (LogLevel lvl)
96 return (static_cast<int>(lvl) > static_cast<int>(max_level));
99 static void set_debug_filter(
const std::string&);
101 static bool no_debug(
const std::string&,
const std::string&,
const int);
104 static void enable_tstamp (
bool);
105 static void enable_debug (
bool);
106 static void set_logger (LogCallback);
111 #define GU_LOG_CPP(level) \
112 if (gu::Logger::no_log(level) || \
113 (level == gu::LOG_DEBUG && \
114 gu::Logger::no_debug(__FILE__, __FUNCTION__, __LINE__))) {} \
115 else gu::Logger(level).get(__FILE__, __FUNCTION__, __LINE__)
119 #define log_fatal GU_LOG_CPP(gu::LOG_FATAL)
120 #define log_error GU_LOG_CPP(gu::LOG_ERROR)
121 #define log_warn GU_LOG_CPP(gu::LOG_WARN)
122 #define log_info GU_LOG_CPP(gu::LOG_INFO)
123 #define log_debug GU_LOG_CPP(gu::LOG_DEBUG)
127 #endif // __GU_LOGGER__
Definition: gu_logger.hpp:42