remote/log/Log.h (96 lines of code) (raw):

#ifndef JCEF_LOG_H #define JCEF_LOG_H #include <chrono> #include <string> #include "include/cef_base.h" class Log { public: static const int LEVEL_DISABLED = 100; static const int LEVEL_FATAL = 10; static const int LEVEL_ERROR = 9; static const int LEVEL_WARN = 8; static const int LEVEL_INFO = 7; static const int LEVEL_DEBUG = 6; static const int LEVEL_TRACE = 5; static void init(int level, std::string logfile); static void setThreadName(std::string name); // assigns thread-local name of the invocation thread static bool isDebugEnabled(); static bool isTraceEnabled(); static bool isStdStreamLogger(); static std::string printLevelAndPath(); template <class ... Args> static void fatal(const char *const format, Args ... args) { log(LEVEL_FATAL, format, args...); } template <class ... Args> static void error(const char *const format, Args ... args) { log(LEVEL_ERROR, format, args...); } template <class ... Args> static void warn(const char *const format, Args ... args) { log(LEVEL_WARN, format, args...); } template <class ... Args> static void info(const char *const format, Args ... args) { log(LEVEL_INFO, format, args...); } template <class ... Args> static void debug(const char *const format, Args ... args) { log(LEVEL_DEBUG, format, args...); } template <class ... Args> static void trace(const char *const format, Args ... args) { log(LEVEL_TRACE, format, args...); } static void log(int level, const char *const format, ...); static bool isEqual(int serverLogLevel, cef_log_severity_t cefLogLevel) { switch (cefLogLevel) { case LOGSEVERITY_DISABLE: return serverLogLevel >= LEVEL_DISABLED; case LOGSEVERITY_FATAL: return serverLogLevel == LEVEL_FATAL; case LOGSEVERITY_ERROR: return serverLogLevel == LEVEL_ERROR; case LOGSEVERITY_WARNING: return serverLogLevel == LEVEL_WARN; case LOGSEVERITY_INFO: return serverLogLevel == LEVEL_INFO; case LOGSEVERITY_DEBUG: return serverLogLevel == LEVEL_DEBUG || serverLogLevel == LEVEL_TRACE; case LOGSEVERITY_DEFAULT: return serverLogLevel == LEVEL_INFO; } return false; } static cef_log_severity_t toCefLogLevel(int serverLogLevel) { switch (serverLogLevel) { case LEVEL_DISABLED: return LOGSEVERITY_DISABLE; case LEVEL_FATAL: return LOGSEVERITY_FATAL; case LEVEL_ERROR: return LOGSEVERITY_ERROR; case LEVEL_WARN: return LOGSEVERITY_WARNING; case LEVEL_INFO: return LOGSEVERITY_INFO; case LEVEL_DEBUG: return LOGSEVERITY_DEBUG; case LEVEL_TRACE: return LOGSEVERITY_DEBUG; } return LOGSEVERITY_DEFAULT; } static std::string level2str(int serverLogLevel); static int str2level(std::string serverLogLevel); static std::string cefLogLevel2str(int serverLogLevel); private: static void initImpl(int level, FILE* logFile = nullptr); }; class LogNdc { public: LogNdc(std::string file, std::string func, std::string threadName); virtual ~LogNdc(); }; #ifdef _WIN32 #define __FILE_NAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #endif #ifdef __linux__ #define __FILE_NAME__ __FILE__ #endif #define TRACE() \ if (doTrace) \ Log::trace(__FUNCTION__) #define FACTORY_TRACE(Key, Prefix) \ static int doFactoryTrace = -1; \ if (doFactoryTrace < 0) { \ doFactoryTrace = getBoolEnv(Key) ? 1 : 0; \ if (doFactoryTrace) FACTORY.setTrace(Prefix); \ } #endif // JCEF_LOG_H