void Logger::printf()

in prod/native/libcommon/code/Logger.cpp [77:114]


void Logger::printf(LogLevel level, const char *format, ...) const {
    va_list args;
    va_start(args, format);
    auto msg = elasticapm::utils::stringVPrintf(format, args);
    va_end(args);

    std::string output = "[EDOT] "s;
    output.append(getFormattedTime());
    output.append(" ");

    size_t indexOfProcessData = output.length();
    output.append(getFormattedProcessData());

    size_t indexOfLogLevel = output.length();
    output.append(" [");
    output.append(getLogLevelName(level));
    output.append("] ");

    size_t indexOfMessage = output.length();
    output.append(std::move(msg));

    output.push_back('\n');

    auto outputSv = std::string_view{output};

    auto msgSv = outputSv.substr(indexOfMessage, output.length() - indexOfMessage - 1);
    auto timeSv = outputSv.substr(0, indexOfProcessData - 1);
    auto processSv = outputSv.substr(indexOfProcessData, indexOfLogLevel - indexOfProcessData);
    auto levelSv = outputSv.substr(indexOfLogLevel + 1, indexOfMessage - indexOfLogLevel - 2);

    std::lock_guard<SpinLock> lock(spinLock_);
    for (auto const &sink : sinks_) {
        if (sink->getLevel() < level) {
            continue;
        }
        sink->writeLog(output, msgSv, timeSv, levelSv, processSv);
    }
}