// Copyright Epic Games, Inc. All Rights Reserved. #include "inprocsessionlogsink.h" #include namespace zen { /// Bias in seconds from DateTime epoch (year 1) to Unix epoch (1970). static constexpr uint64_t UnixEpochBiasSeconds = uint64_t(double(1970 - 1) * 365.2425) * 86400; static DateTime TimePointToDateTime(logging::LogClock::time_point Time) { auto Duration = Time.time_since_epoch(); auto Seconds = std::chrono::duration_cast(Duration); uint64_t Ticks = (UnixEpochBiasSeconds + static_cast(Seconds.count())) * TimeSpan::TicksPerSecond; return DateTime{Ticks}; } void InProcSessionLogSink::Log(const logging::LogMessage& Msg) { Ref Session = m_Service.GetSession(m_SessionId); if (!Session) { return; } SessionsService::LogEntry Entry{ .Timestamp = TimePointToDateTime(Msg.GetTime()), .Level = std::string(logging::ToStringView(Msg.GetLevel())), .Message = std::string(Msg.GetPayload()), }; Session->AppendLog(std::move(Entry)); } } // namespace zen