carb/logging/ILogging.h
File members: carb/logging/ILogging.h
// Copyright (c) 2018-2024, 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"
#define carb_logging_ILogging_latest CARB_HEXVERSION(1, 2)
#ifndef carb_logging_ILogging
#    define carb_logging_ILogging CARB_HEXVERSION(1, 1)
#endif
#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_EX("carb::logging::ILogging", carb_logging_ILogging_latest, carb_logging_ILogging)
    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);
#if CARB_VERSION_ATLEAST(carb_logging_ILogging, 1, 1)
    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);
#else
    StandardLogger*(CARB_ABI* getDefaultLogger)();
    StandardLogger*(CARB_ABI* createStandardLogger)();
    void(CARB_ABI* destroyStandardLogger)(StandardLogger* logger);
#endif
    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)();
#if CARB_VERSION_ATLEAST(carb_logging_ILogging, 1, 1)
    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);
    }
#endif
};
} // namespace logging
} // namespace carb