示例#1
0
文件: Logger.cpp 项目: trasz/cbang
Logger::LogStream Logger::createStream(const string &_domain, int level,
                                       const std::string &_prefix) {
  string domain = simplifyDomain(_domain);

  if (enabled(domain, level)) {
    // Log date periodically
    uint64_t now = Time::now();
    if (logDatePeriodically && lastDate + logDatePeriodically <= now) {
      write(String::bar(Time(now, "Date: %Y-%m-%d").toString()) +
            (logCRLF ? "\r\n" : "\n"));
      lastDate = now;
    }

    string prefix = startColor(level) + getHeader(domain, level) + _prefix;
    string suffix = endColor(level);

    string trailer;
#ifdef HAVE_DEBUGGER
    if (domainTraces.find(domain) != domainTraces.end()) {
      StackTrace trace;
      Debugger::instance().getStackTrace(trace);
      for (int i = 0; i < 3; i++) trace.pop_front();
      trailer = SSTR(trace);
    }
#endif

    return new cb::LogStream(prefix, suffix, trailer);

  } else return new NullStream<>;
}