18 #include <mach/mach_time.h> 53 static LoggerSet* sAllLoggers =
new LoggerSet();
57 static char sDateTimeFormat[16];
60 static char sTimeBuff[512];
63 time(&logger::Private::sRawTime);
65 sProcessedTime = localtime(&logger::Private::sRawTime);
66 return strftime(logger::Private::sTimeBuff, 512,
67 logger::Private::sDateTimeFormat,
68 logger::Private::sProcessedTime);
83 case eTrace :
return "TRACE";
break;
84 case eDebug :
return "DEBUG";
break;
85 case eInfo :
return "INFO";
break;
86 case eProg :
return "PROG";
break;
87 case eWarn :
return "WARN";
break;
88 case eError :
return "ERROR";
break;
89 case eFatal :
return "FATAL";
break;
90 default :
return "XXX";
112 logger::Private::sMutex.lock();
113 logger::Private::getTimeAbsoluteStr();
117 (*fOut) << Private::level2Color(level) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
119 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
123 (*fOut) << message <<
EndColor() << endl;
128 (*fOut) << logger::Private::sTimeBuff <<
" [" << setw(5) << level <<
"] ";
130 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
134 (*fOut) << message << endl;
136 logger::Private::sMutex.unlock();
141 logger::Private::sMutex.lock();
142 logger::Private::getTimeAbsoluteStr();
146 (*fErr) << Private::level2Color(level) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
148 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
152 (*fErr) << message <<
EndColor() << endl;
157 (*fErr) << logger::Private::sTimeBuff <<
" [" << setw(5) << Private::level2Str(level) <<
"] ";
159 (*fOut) <<
"(tid " << std::this_thread::get_id() <<
") ";
163 (*fErr) << message << endl;
165 logger::Private::sMutex.unlock();
169 mutex logger::Private::sMutex;
171 char logger::Private::sDateTimeFormat[16];
172 time_t logger::Private::sRawTime;
173 tm* logger::Private::sProcessedTime;
174 char logger::Private::sTimeBuff[512];
176 bool logger::Private::fColored =
true;
178 std::ostream* logger::Private::fOut = &cout;
179 std::ostream* logger::Private::fErr = &cerr;
182 logger::logger(
const char* name) : fPrivate(new
Private())
190 const char* logName = strrchr(name,
'/') ? strrchr(name,
'/') + 1 : name;
194 sprintf(logger::Private::sDateTimeFormat,
"%%Y-%%m-%%d %%T");
203 sprintf(logger::Private::sDateTimeFormat,
"%%Y-%%m-%%d %%T");
220 #if defined(NDEBUG) && defined(STANDARD) 222 #elif defined(NDEBUG) 233 (*logIt)->SetLevel(level);
240 logger::Private::fColored = flag;
246 logger::Private::fOut = stream;
252 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)
void SetGlobalLevel(ELevel level) const
const string & FatalColor()
static size_t getTimeAbsoluteStr()
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)
bool IsLevelEnabled(ELevel level) const
logger(const char *name=0)
const string & ErrorColor()
static std::ostream * fOut
void SetLevel(ELevel level) const
const string & DebugColor()
const string & InfoColor()
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)