9 #define SCARAB_API_EXPORTS 47 static LoggerSet* sAllLoggers =
new LoggerSet();
51 static char sDateTimeFormat[16];
54 static char sTimeBuff[512];
57 time(&logger::Private::sRawTime);
59 sProcessedTime = localtime(&logger::Private::sRawTime);
60 return strftime(logger::Private::sTimeBuff, 512,
61 logger::Private::sDateTimeFormat,
62 logger::Private::sProcessedTime);
77 case eTrace :
return "TRACE";
break;
78 case eDebug :
return "DEBUG";
break;
79 case eInfo :
return "INFO";
break;
80 case eProg :
return "PROG";
break;
81 case eWarn :
return "WARN";
break;
82 case eError :
return "ERROR";
break;
83 case eFatal :
return "FATAL";
break;
84 default :
return "XXX";
106 logger::Private::sMutex.lock();
107 logger::Private::getTimeAbsoluteStr();
111 (*fOut) << Private::level2Color(level) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
113 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
117 (*fOut) << message <<
EndColor() << endl;
122 (*fOut) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
124 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
128 (*fOut) << message << endl;
130 logger::Private::sMutex.unlock();
135 logger::Private::sMutex.lock();
136 logger::Private::getTimeAbsoluteStr();
140 (*fErr) << Private::level2Color(level) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
142 (*fErr) <<
"(tid " << std::this_thread::get_id() <<
") ";
146 (*fErr) << message <<
EndColor() << endl;
151 (*fErr) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
153 (*fErr) <<
"(tid " << std::this_thread::get_id() <<
") ";
157 (*fErr) << message << endl;
159 logger::Private::sMutex.unlock();
163 mutex logger::Private::sMutex;
165 char logger::Private::sDateTimeFormat[16];
166 time_t logger::Private::sRawTime;
167 tm* logger::Private::sProcessedTime;
168 char logger::Private::sTimeBuff[512];
170 bool logger::Private::fColored =
true;
172 std::ostream* logger::Private::fOut = &cout;
173 std::ostream* logger::Private::fErr = &cerr;
176 logger::logger(
const char* name) : fPrivate(new
Private())
184 const char* logName = strrchr(name,
'/') ? strrchr(name,
'/') + 1 : name;
192 sprintf(logger::Private::sDateTimeFormat,
"%%Y-%%m-%%d %%T");
205 sprintf(logger::Private::sDateTimeFormat,
"%%Y-%%m-%%d %%T");
222 #if defined(NDEBUG) && defined(STANDARD) 224 #elif defined(NDEBUG) 235 (*logIt)->SetLevel(level);
243 logger::Private::fColored = flag;
245 std::cerr <<
"Colored logging is not enabled in Windows" << std::endl;
252 logger::Private::fOut = stream;
258 logger::Private::fErr = stream;
const string & TraceColor()
const string & OtherColor()
const string & EndColor()
static LoggerSet * AllLoggers()
void logCerr(ELevel level, const string &message, const Location &loc)
const string & FatalColor()
static size_t getTimeAbsoluteStr()
void SetGlobalLevel(ELevel level) const
static std::ostream * fErr
void Log(ELevel level, const std::string &message, const Location &loc=Location())
#define COLOR_FOREGROUND_WHITE
static void SetColored(bool flag)
Contains the logger class and macros, based on Kasper's KLogger class.
static const char * level2Str(ELevel level)
static string level2Color(ELevel level)
const string & ProgColor()
static void SetErrStream(std::ostream *stream)
logger(const char *name=0)
const string & ErrorColor()
static std::ostream * fOut
bool IsLevelEnabled(ELevel level) const
const string & DebugColor()
const string & InfoColor()
void SetLevel(ELevel level) const
const string & WarnColor()
#define COLOR_FOREGROUND_GREEN
static tm * sProcessedTime
static void SetOutStream(std::ostream *stream)
std::set< logger *> LoggerSet
#define COLOR_FOREGROUND_BLUE
#define COLOR_FOREGROUND_CYAN
#define COLOR_FOREGROUND_RED
#define COLOR_FOREGROUND_YELLOW
void logCout(ELevel level, const string &message, const Location &loc)