sdk/inc/azure/core/az_log.h (41 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT /** * @file * * @brief This header defines the types and functions your application uses to be notified of Azure * SDK client library log messages. * * @details If you define the `AZ_NO_LOGGING` symbol when compiling the SDK code (or adding option * `-DLOGGING=OFF` with cmake), all of the Azure SDK logging functionality will be excluded, making * the resulting compiled code smaller and faster. * * @note You MUST NOT use any symbols (macros, functions, structures, enums, etc.) * prefixed with an underscore ('_') directly in your application code. These symbols * are part of Azure SDK's internal implementation; we do not document these symbols * and they are subject to change in future versions of the SDK which would break your code. */ #ifndef _az_LOG_H #define _az_LOG_H #include <azure/core/az_result.h> #include <azure/core/az_span.h> #include <stdint.h> #include <azure/core/_az_cfg_prefix.h> /** * @brief Identifies the classifications of log messages produced by the SDK. * * @note See the following `az_log_classification` values from various headers: * - #az_log_classification_core * - #az_log_classification_iot */ typedef int32_t az_log_classification; // az_log_classification Bits: // - 31 Always 0. // - 16..30 Facility. // - 0..15 Code. #define _az_LOG_MAKE_CLASSIFICATION(facility, code) \ ((az_log_classification)(((uint32_t)(facility) << 16U) | (uint32_t)(code))) /** * @brief Identifies the #az_log_classification produced by the SDK Core. */ enum az_log_classification_core { AZ_LOG_HTTP_REQUEST = _az_LOG_MAKE_CLASSIFICATION(_az_FACILITY_CORE_HTTP, 1), ///< HTTP request is about to be sent. AZ_LOG_HTTP_RESPONSE = _az_LOG_MAKE_CLASSIFICATION(_az_FACILITY_CORE_HTTP, 2), ///< HTTP response was received. AZ_LOG_HTTP_RETRY = _az_LOG_MAKE_CLASSIFICATION( _az_FACILITY_CORE_HTTP, 3), ///< First HTTP request did not succeed and will be retried. }; /** * @brief Defines the signature of the callback function that application developers must provide to * receive Azure SDK log messages. * * @param[in] classification The log message's #az_log_classification. * @param[in] message The log message. */ typedef void (*az_log_message_fn)(az_log_classification classification, az_span message); /** * @brief Defines the signature of the callback function that application developers must provide * which will be used to check whether a particular log classification should be logged. * * @param[in] classification The log message's #az_log_classification. * * @return Whether or not a log message with the provided classification should be logged. */ typedef bool (*az_log_classification_filter_fn)(az_log_classification classification); /** * @brief Sets the functions that will be invoked to report an SDK log message. * * @param[in] log_message_callback __[nullable]__ A pointer to the function that will be invoked * when the SDK reports a log message that should be logged according to the result of the * #az_log_classification_filter_fn provided to #az_log_set_classification_filter_callback(). If * `NULL`, no function will be invoked. * * @remarks By default, this is `NULL`, which means, no function is invoked. */ #ifndef AZ_NO_LOGGING void az_log_set_message_callback(az_log_message_fn log_message_callback); #else AZ_INLINE void az_log_set_message_callback(az_log_message_fn log_message_callback) { (void)log_message_callback; } #endif // AZ_NO_LOGGING /** * @brief Sets the functions that will be invoked to check whether an SDK log message should be * reported. * * @param[in] message_filter_callback __[nullable]__ A pointer to the function that will be invoked * when the SDK checks whether a log message of a particular #az_log_classification should be * logged. If `NULL`, log messages for all classifications will be logged, by passing them to the * #az_log_message_fn provided to #az_log_set_message_callback(). * * @remarks By default, this is `NULL`, in which case no function is invoked to check whether a * classification should be logged or not. The SDK assumes true, passing messages with any log * classification to the #az_log_message_fn provided to #az_log_set_message_callback(). */ #ifndef AZ_NO_LOGGING void az_log_set_classification_filter_callback( az_log_classification_filter_fn message_filter_callback); #else AZ_INLINE void az_log_set_classification_filter_callback( az_log_classification_filter_fn message_filter_callback) { (void)message_filter_callback; } #endif // AZ_NO_LOGGING #include <azure/core/_az_cfg_suffix.h> #endif // _az_LOG_H