carb/logging/ILogging.h

File members: carb/logging/ILogging.h

// Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto. Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//

#pragma once

#include "../Interface.h"
#include "../IObject.h"
#include "StandardLogger2.h"

namespace carb
{
namespace logging
{

struct StandardLogger;
class StandardLogger2;
struct Logger;

typedef void(CARB_ABI* SetLogLevelFn)(int32_t logLevel);

enum class LogSettingBehavior
{
    eInherit,
    eOverride
};

typedef void (*LogFn)(const char* source,
                      int32_t level,
                      const char* fileName,
                      const char* functionName,
                      int lineNumber,
                      const char* fmt,
                      ...);

struct ILogging
{
    CARB_PLUGIN_INTERFACE("carb::logging::ILogging", 1, 1)

    void(CARB_ABI* log)(const char* source,
                        int32_t level,
                        const char* fileName,
                        const char* functionName,
                        int lineNumber,
                        const char* fmt,
                        ...) CARB_PRINTF_FUNCTION(6, 7);

    void(CARB_ABI* setLevelThreshold)(int32_t level);

    int32_t(CARB_ABI* getLevelThreshold)();

    void(CARB_ABI* setLogEnabled)(bool enabled);

    bool(CARB_ABI* isLogEnabled)();

    void(CARB_ABI* setLevelThresholdForSource)(const char* source, LogSettingBehavior behavior, int32_t level);

    void(CARB_ABI* setLogEnabledForSource)(const char* source, LogSettingBehavior behavior, bool enabled);

    void(CARB_ABI* reset)();

    void(CARB_ABI* addLogger)(Logger* logger);

    void(CARB_ABI* removeLogger)(Logger* logger);

    CARB_DEPRECATED("Use getDefaultLogger() instead") StandardLogger*(CARB_ABI* getDefaultLoggerOld)();

    CARB_DEPRECATED("Use createStandardLogger() instead") StandardLogger*(CARB_ABI* createStandardLoggerOld)();

    CARB_DEPRECATED("Use StandardLogger2::release() instead")
    void(CARB_ABI* destroyStandardLoggerOld)(StandardLogger* logger);

    void(CARB_ABI* registerSource)(const char* source, SetLogLevelFn setLevelThreshold);

    void(CARB_ABI* unregisterSource)(const char* source);

    bool(CARB_ABI* setLogAsync)(bool logAsync);

    bool(CARB_ABI* getLogAsync)();

    void(CARB_ABI* flushLogs)();

    StandardLogger2*(CARB_ABI* getStandardLogger2)(StandardLogger* logger);

    StandardLogger2*(CARB_ABI* getDefaultLogger)();

    StandardLogger2*(CARB_ABI* createStandardLoggerInternal)();

    ObjectPtr<StandardLogger2> createStandardLogger()
    {
        using Ptr = ObjectPtr<StandardLogger2>;
        return Ptr(createStandardLoggerInternal(), Ptr::InitPolicy::eSteal);
    }
};

} // namespace logging
} // namespace carb