void
FileLogger::prepareFormat(char * buf, size_t size, const Logger::Level level, const char* format) {
    char timestr[64];
    if (print_time_) {
        struct tm tm;
        time_t t;
        time(&t);
        localtime_r(&t, &tm);
        strftime(timestr, sizeof(timestr) - 1, "[%Y/%m/%d %T]", &tm);
    }

    std::string level_str;
    if (print_level_) {
        level_str = levelToString(level);
    }


    if (print_time_ && print_level_) {
        snprintf(buf, size - 1, "%s %s: %s\n", timestr, level_str.c_str(), format);
    }
    else if (print_time_) {
        snprintf(buf, size - 1, "%s %s\n", timestr, format);
    }
    else if (print_level_) {
        snprintf(buf, size - 1, "%s: %s\n", level_str.c_str(), format);
    }
    else {
        snprintf(buf, size - 1, "%s\n", format);
    }
    buf[size - 1] = '\0';
}
示例#2
0
 Stream& get(const Level& level) {
     std::time_t time =
         std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
     char foo[24];
     if (0 < strftime(foo, sizeof(foo), "[%z %T]", std::localtime(&time))) {
         buffer_ << foo << "[" << std::this_thread::get_id() << "][" << levelToString(level) << "] ";
     }
     return buffer_;
 }
示例#3
0
文件: logger.c 项目: Trinitek/DLLTest
void writeLog(char* origin, WARNLEVEL level, char* message) {
    if (origin == NULL) {
        origin = "???";
    }
    if (message == NULL) {
        message = "";
    }
    printf("[%s] [%s] %s\n", levelToString(level), origin, message);
    return;
}
示例#4
0
std::string Logging::getHeader(LoggingLevel level) {
    auto now =
        std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
    char timeStr[20];
#ifdef JET_WINDOWS
    tm time;
    localtime_s(&time, &now);
    strftime(timeStr, sizeof(timeStr), "%F %T", &time);
#else
    strftime(timeStr, sizeof(timeStr), "%F %T", std::localtime(&now));
#endif
    char header[256];
    snprintf(header, sizeof(header), "[%s] %s ", levelToString(level).c_str(),
             timeStr);
    return header;
}
示例#5
0
文件: Log.cpp 项目: nemerle/boomerang
void Log::logDirect(LogLevel level, const char *file, int line, const QString &msg)
{
    if (!canLog(level)) {
        return;
    }

    char prettyFile[40]; // truncated file name
    truncateFileName(prettyFile, 40, file);

    QString header  = "%1 | %2 | %3 | %4\n";
    QString logLine = header.arg(levelToString(level)).arg(prettyFile).arg(line, 4).arg(msg);
    this->write(logLine);

    if (level == LogLevel::Fatal) {
        abort();
    }
}
示例#6
0
String CtrlrLog::formatMessage(const CtrlrLogMessage &m, const bool includeLevel, const bool includeTimestamp)
{
	String ret;

	if (includeLevel)
		ret << levelToString (m.level);

	if (includeTimestamp)
		ret << timeToString (m.time);

	ret << ": ";

	if (m.message.endsWith("\n"))
	{
		ret << m.message.substring(1);
	}
	else
	{
		ret << m.message;
	}

	return (ret);
}
示例#7
0
void Logger::write(const QDateTime& timeStamp, LogLevel logLevel, const char* file, int line, const char* function, const char* category,
                   const QString& message, bool fromLocalInstance)
{
  Q_D(Logger);

  QMutexLocker locker(&d->loggerMutex);

  QString logCategory = QString::fromLatin1(category);
  if (logCategory.isNull() && !d->defaultCategory.isNull())
    logCategory = d->defaultCategory;

  bool wasWritten = false;
  bool isGlobalInstance = this == globalInstance();
  bool linkedToGlobal = isGlobalInstance && d->categories.value(logCategory, false);

  if (!logCategory.isNull())
  {
    QList<AbstractAppender*> appenders = d->categoryAppenders.values(logCategory);
    if (appenders.length() == 0)
    {
      if (logCategory != d->defaultCategory && !linkedToGlobal && !fromLocalInstance)
        std::cerr << "No appenders assotiated with category " << qPrintable(logCategory) << std::endl;
    }
    else
    {
      foreach (AbstractAppender* appender, appenders)
        appender->write(timeStamp, logLevel, file, line, function, logCategory, message);
      wasWritten = true;
    }
  }

  // the default category is linked to the main logger appenders
  // global logger instance also writes all linked categories to the main appenders
  if (logCategory.isNull() || logCategory == d->defaultCategory || linkedToGlobal)
  {
    if (!d->appenders.isEmpty())
    {
      foreach (AbstractAppender* appender, d->appenders)
        appender->write(timeStamp, logLevel, file, line, function, logCategory, message);
      wasWritten = true;
    }
    else
    {
      static bool noAppendersWarningShown = false;
      if (!noAppendersWarningShown)
      {
#if defined(Q_OS_ANDROID)
        __android_log_write(ANDROID_LOG_WARN, "Logger", "No appenders registered with logger");
#else
        std::cerr << "No appenders registered with logger" << std::endl;
#endif
        noAppendersWarningShown = true;
      }
    }
  }

  // local logger instances send category messages to the global instance
  if (!logCategory.isNull() && !isGlobalInstance)
    globalInstance()->write(timeStamp, logLevel, file, line, function, logCategory.toLatin1(), message, true);

  if (!wasWritten && !fromLocalInstance)
  {
    // Fallback
#if defined(Q_OS_ANDROID)
    QString result = QString(QLatin1String("<%2> %3")).arg(AbstractStringAppender::stripFunctionName(function)).arg(message);
    __android_log_write(AndroidAppender::androidLogPriority(logLevel), "Logger", qPrintable(result));
#else
    QString result = QString(QLatin1String("[%1] <%2> %3")).arg(levelToString(logLevel), -7)
                     .arg(AbstractStringAppender::stripFunctionName(function)).arg(message);
    std::cerr << qPrintable(result) << std::endl;
#endif
  }

  if (logLevel == Logger::Fatal)
    abort();
}
示例#8
0
QString VisualLog::MessageInfo::expand(const QString &pattern) const{

    QString base = "";
    QDateTime dt = stamp();

    QString::const_iterator it = pattern.begin();
    while ( it != pattern.end() ){
        if ( *it == QChar('%') ){
            ++it;
            if ( it != pattern.end() ){
                char c = it->toLatin1();
                switch(c){
                case 'p': {
                    if ( m_location && !m_location->remote.isEmpty() )
                        base += m_location->remote + "> ";
                    base += QString().sprintf(
                        "%0*d-%0*d-%0*d %0*d:%0*d:%0*d.%0*d %s %s@%d: ",
                        4, dt.date().year(),
                        2, dt.date().month(),
                        2, dt.date().day(),
                        2, dt.time().hour(),
                        2, dt.time().minute(),
                        2, dt.time().second(),
                        3, dt.time().msec(),
                        qPrintable(levelToString(m_level).toLower()),
                        qPrintable(sourceFunctionName()),
                        sourceLineNumber()
                    );
                    break;
                }
                case 'r': base += sourceRemoteLocation(); break;
                case 'F': base += sourceFileName(); break;
                case 'N': base += extractFileNameSegment(sourceFileName()); break;
                case 'U': base += sourceFunctionName(); break;
                case 'L': base += QString::number(sourceLineNumber()); break;
                case 'V': base += levelToString(m_level); break;
                case 'v': base += levelToString(m_level).toLower(); break;
                case 'w': base += QDate::shortDayName(dt.date().dayOfWeek()); break;
                case 'W': base += QDate::longDayName(dt.date().dayOfWeek()); break;
                case 'b': base += QDate::shortMonthName(dt.date().month()); break;
                case 'B': base += QDate::longMonthName(dt.date().month()); break;
                case 'd': base += QString().sprintf("%0*d", 2, dt.date().day() ); break;
                case 'e': base += QString().sprintf("%d",      dt.date().day() ); break;
                case 'f': base += QString().sprintf("%*d",  2, dt.date().day() ); break;
                case 'm': base += QString().sprintf("%0*d", 2, dt.date().month() ); break;
                case 'n': base += QString().sprintf("%d",      dt.date().month() ); break;
                case 'o': base += QString().sprintf("%*d",  2, dt.date().month() ); break;
                case 'y': base += QString().sprintf("%0*d", 2, dt.date().year() % 100 ); break;
                case 'Y': base += QString().sprintf("%0*d", 4, dt.date().year() ); break;
                case 'H': base += QString().sprintf("%0*d", 2, dt.time().hour() ); break;
                case 'I': {
                    int hour = dt.time().hour();
                    base += QString().sprintf("%0*d", 2, (hour < 1 ? 12 : (hour > 12 ? hour - 12  : hour)));
                    break;
                }
                case 'a': base += QString().sprintf(dt.time().hour() < 12  ? "am" : "pm" ); break;
                case 'A': base += QString().sprintf(dt.time().hour() < 12  ? "AM" : "PM" ); break;
                case 'M': base += QString().sprintf("%0*d", 2, dt.time().minute()); break;
                case 'S': base += QString().sprintf("%0*d", 2, dt.time().second() ); break;
                case 's': base += QString().sprintf("%0*d.%0*d", 2, dt.time().second(), 3, dt.time().msec() ); break;
                case 'i': base += QString().sprintf("%0*d", 3, dt.time().msec() ); break;
                case 'c': base += QString().sprintf("%d",      dt.time().msec() / 100 ); break;
                default: base += *it;
                }
            }
        } else {
            base += *it;
        }
        ++it;
    }

    return base;
}
示例#9
0
void Logger::log(const LogLevel& level, const std::string& message) {
	os  << getCurrentDateTime() << "\t " 
		<< levelToString(level) << "\t "
		<< message << std::endl;
}