Program Listing for File UnrealSink.h

Return to documentation for file (axr.sdk/logging/UnrealSink.h)

// Copyright (C) AcceleratXR, Inc. All rights reserved.
#pragma once

#include "Async/Async.h"
#include "OnlineSubsystem.h"

#ifdef _WIN32
#include "MinimalWindowsApi.h"
#endif
#include <spdlog/sinks/sink.h>

namespace axr
{
namespace sdk
{
namespace logging
{

class ONLINESUBSYSTEMAXR_API UnrealSink : public spdlog::sinks::sink
{
public:
    UnrealSink() {}
    virtual ~UnrealSink() = default;
    virtual void log(const spdlog::details::log_msg& msg)
    {
        if (msg.level == spdlog::level::off)
        {
            return;
        }

        FString message(msg.payload.size(), msg.payload.data());

        AsyncTask(ENamedThreads::GameThread, [msg, message]()
            {
                switch (msg.level)
                {
                case spdlog::level::critical: UE_LOG(LogOnline, Fatal, TEXT("%s%s"), TEXT("AXRCoreSDK: "), *message); break;
                case spdlog::level::debug: UE_LOG(LogOnline, Verbose, TEXT("%s%s"), TEXT("AXRCoreSDK: "), *message); break;
                case spdlog::level::err: UE_LOG(LogOnline, Error, TEXT("%s%s"), TEXT("AXRCoreSDK: "), *message); break;
                case spdlog::level::trace: UE_LOG(LogOnline, VeryVerbose, TEXT("%s%s"), TEXT("AXRCoreSDK: "), *message); break;
                case spdlog::level::warn: UE_LOG(LogOnline, Warning, TEXT("%s%s"), TEXT("AXRCoreSDK: "), *message); break;
                default: UE_LOG(LogOnline, Log, TEXT("%s%s"), TEXT("AXRCoreSDK: "), *message); break;
                }
            });
    }

    virtual void flush() {}
    virtual void set_pattern(const std::string& pattern) {}
    virtual void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) {}
};

} // namespace logging
} // namespace sdk
} // namespace axr