std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& event, std::ostream& os) { static const size_t maxLogLine = 10 * 1024; _dateFormatter(os, event.getDate()); os << ' '; os << event.getSeverity().toChar(); os << ' '; LogComponent component = event.getComponent(); os << component; os << ' '; StringData contextName = event.getContextName(); if (!contextName.empty()) { os << '[' << contextName << "] "; } StringData msg = event.getMessage(); if (msg.size() > maxLogLine) { os << "warning: log line attempted (" << msg.size() / 1024 << "k) over max size (" << maxLogLine / 1024 << "k), printing beginning and end ... "; os << msg.substr(0, maxLogLine / 3); os << " .......... "; os << msg.substr(msg.size() - (maxLogLine / 3)); } else { os << msg; } if (!msg.endsWith(StringData("\n", StringData::LiteralTag()))) os << '\n'; return os; }
std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& event, std::ostream &os) { static const size_t maxLogLine = 10 * 1024; char dateString[64]; curTimeString(dateString); os << dateString << ' '; StringData contextName = event.getContextName(); if (!contextName.empty()) { os << '[' << contextName << "] "; } LogSeverity severity = event.getSeverity(); if (severity >= LogSeverity::Info()) { os << severity << ": "; } StringData msg = event.getMessage(); if (msg.size() > maxLogLine) { os << "warning: log line attempted (" << msg.size() / 1024 << "k) over max size (" << maxLogLine / 1024 << "k), printing beginning and end ... "; os << msg.substr(0, maxLogLine / 3); os << " .......... "; os << msg.substr(msg.size() - (maxLogLine / 3)); } else { os << msg; } if (!msg.endsWith(StringData("\n", StringData::LiteralTag()))) os << '\n'; return os; }
std::ostream& MessageEventUnadornedEncoder::encode(const MessageEventEphemeral& event, std::ostream& os) { StringData message = event.getMessage(); os << message; if (!message.endsWith("\n")) os << '\n'; return os; }
std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& event, std::ostream& os) { const auto maxLogSizeKB = getMaxLogSizeKB(); const size_t maxLogSize = maxLogSizeKB * 1024; getDateFormatter()(os, event.getDate()); os << ' '; const auto severity = event.getSeverity(); os << severity.toStringDataCompact(); os << ' '; LogComponent component = event.getComponent(); os << component; os << ' '; StringData contextName = event.getContextName(); if (!contextName.empty()) { os << '[' << contextName << "] "; } StringData msg = event.getMessage(); #ifdef _WIN32 // We need to translate embedded Unix style line endings into Windows style endings. std::string tempstr; size_t embeddedNewLine = msg.find('\n'); if (embeddedNewLine != std::string::npos) { tempstr = msg.toString().replace(embeddedNewLine, 1, "\r\n"); embeddedNewLine = tempstr.find('\n', embeddedNewLine + 2); while (embeddedNewLine != std::string::npos) { tempstr = tempstr.replace(embeddedNewLine, 1, "\r\n"); embeddedNewLine = tempstr.find('\n', embeddedNewLine + 2); } msg = tempstr; } #endif if (event.isTruncatable() && msg.size() > maxLogSize) { os << "warning: log line attempted (" << msg.size() / 1024 << "kB) over max size (" << maxLogSizeKB << "kB), printing beginning and end ... "; os << msg.substr(0, maxLogSize / 3); os << " .......... "; os << msg.substr(msg.size() - (maxLogSize / 3)); } else { os << msg; } if (!msg.endsWith(kEOL)) os << kEOL; return os; }
std::ostream& MessageEventWithContextEncoder::encode(const MessageEventEphemeral& event, std::ostream& os) { StringData contextName = event.getContextName(); if (!contextName.empty()) { os << '[' << contextName << "] "; } StringData message = event.getMessage(); os << message; if (!message.endsWith("\n")) os << '\n'; return os; }