9 #define SCARAB_API_EXPORTS 54 static LoggerSet* sAllLoggers =
new LoggerSet();
58 static char sDateTimeFormat[16];
61 static char sTimeBuff[512];
64 time(&logger::Private::sRawTime);
66 sProcessedTime = localtime(&logger::Private::sRawTime);
67 return strftime(logger::Private::sTimeBuff, 512,
68 logger::Private::sDateTimeFormat,
69 logger::Private::sProcessedTime);
84 case eTrace :
return "TRACE";
break;
85 case eDebug :
return "DEBUG";
break;
86 case eInfo :
return "INFO";
break;
87 case eProg :
return "PROG";
break;
88 case eWarn :
return "WARN";
break;
89 case eError :
return "ERROR";
break;
90 case eFatal :
return "FATAL";
break;
91 default :
return "XXX";
113 logger::Private::sMutex.lock();
114 logger::Private::getTimeAbsoluteStr();
118 (*fOut) << Private::level2Color(level) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
120 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
124 (*fOut) << message <<
EndColor() << endl;
129 (*fOut) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
131 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
135 (*fOut) << message << endl;
137 logger::Private::sMutex.unlock();
142 logger::Private::sMutex.lock();
143 logger::Private::getTimeAbsoluteStr();
147 (*fErr) << Private::level2Color(level) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
149 (*fErr) <<
"(tid " << std::this_thread::get_id() <<
") ";
153 (*fErr) << message <<
EndColor() << endl;
158 (*fErr) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
160 (*fErr) <<
"(tid " << std::this_thread::get_id() <<
") ";
164 (*fErr) << message << endl;
166 logger::Private::sMutex.unlock();
170 mutex logger::Private::sMutex;
172 char logger::Private::sDateTimeFormat[16];
173 time_t logger::Private::sRawTime;
174 tm* logger::Private::sProcessedTime;
175 char logger::Private::sTimeBuff[512];
177 bool logger::Private::fColored =
true;
179 std::ostream* logger::Private::fOut = &cout;
180 std::ostream* logger::Private::fErr = &cerr;
183 logger::logger(
const char* name) : fPrivate(new
Private())
191 const char* logName = strrchr(name,
'/') ? strrchr(name,
'/') + 1 : name;
199 sprintf(logger::Private::sDateTimeFormat,
"%%Y-%%m-%%d %%T");
212 sprintf(logger::Private::sDateTimeFormat,
"%%Y-%%m-%%d %%T");
229 #if defined(NDEBUG) && defined(STANDARD) 231 #elif defined(NDEBUG) 242 (*logIt)->SetLevel(level);
250 logger::Private::fColored = flag;
252 std::cerr <<
"Colored logging is not enabled in Windows" << std::endl;
259 logger::Private::fOut = stream;
265 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)