/** * Copyright 2013-2022 Software Radio Systems Limited * * This file is part of srsRAN. * * srsRAN is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * srsRAN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * A copy of the GNU Affero General Public License can be found in * the LICENSE file in the top-level directory of this distribution * and at http://www.gnu.org/licenses/. * */ #ifndef SRSLOG_SRSLOG_C_H #define SRSLOG_SRSLOG_C_H #ifdef __cplusplus #include #else #include #endif #ifdef __cplusplus extern "C" { #endif /** * Common types. */ typedef int srslog_bool; typedef struct srslog_opaque_sink srslog_sink; typedef struct srslog_opaque_log_channel srslog_log_channel; typedef struct srslog_opaque_basic_logger srslog_logger; /** * This function initializes the logging framework. It must be called before * any log entry is generated. * NOTE: Calling this function more than once has no side effects. */ void srslog_init(void); /** * Installs the specified sink to be used as the default one by new log * channels and loggers. * The initial default sink writes to stdout. */ void srslog_set_default_sink(srslog_sink* s); /** * Returns the instance of the default sink being used. */ srslog_sink* srslog_get_default_sink(void); /** * Returns an instance of a log_channel with the specified id that writes to * the default sink using the default log channel configuration. * NOTE: Any '#' characters in the id will get removed. */ srslog_log_channel* srslog_fetch_log_channel(const char* id); /** * Finds a log channel with the specified id string in the repository. On * success returns a pointer to the requested log channel, otherwise NULL. */ srslog_log_channel* srslog_find_log_channel(const char* id); /** * Controls whether the specified channel accepts incoming log entries. */ void srslog_set_log_channel_enabled(srslog_log_channel* channel, srslog_bool enabled); /** * Returns 1 if the specified channel is accepting incoming log entries, * otherwise 0. */ srslog_bool srslog_is_log_channel_enabled(srslog_log_channel* channel); /** * Returns the id string of the specified channel. */ const char* srslog_get_log_channel_id(srslog_log_channel* channel); /** * Logs the provided log entry using the specified log channel. When the channel * is disabled the log entry wil be discarded. * NOTE: Only printf style formatting is supported when using the C API. */ void srslog_log(srslog_log_channel* channel, const char* fmt, ...); /** * Returns an instance of a basic logger (see basic_logger type) with the * specified id string. All logger channels will write into the default sink. */ srslog_logger* srslog_fetch_default_logger(const char* id); /** * Finds a logger with the specified id string in the repository. On success * returns a pointer to the requested log channel, otherwise NULL. */ srslog_logger* srslog_find_default_logger(const char* id); /** * These functions log the provided log entry using the specified logger. * Entries are automatically discarded depending on the configured level of the * logger. * NOTE: Only printf style formatting is supported when using the C API. */ void srslog_debug(srslog_logger* log, const char* fmt, ...); void srslog_info(srslog_logger* log, const char* fmt, ...); void srslog_warning(srslog_logger* log, const char* fmt, ...); void srslog_error(srslog_logger* log, const char* fmt, ...); /** * Returns the id string of the specified logger. */ const char* srslog_get_logger_id(srslog_logger* log); typedef enum { srslog_lvl_none, /**< disable logger */ srslog_lvl_error, /**< error logging level */ srslog_lvl_warning, /**< warning logging level */ srslog_lvl_info, /**< info logging level */ srslog_lvl_debug /**< debug logging level */ } srslog_log_levels; /** * Sets the logging level into the specified logger. */ void srslog_set_logger_level(srslog_logger* log, srslog_log_levels lvl); /** * Finds a sink with the specified id string in the repository. On * success returns a pointer to the requested sink, otherwise NULL. */ srslog_sink* srslog_find_sink(const char* id); /** * Returns an instance of a sink that writes to the stdout stream. */ srslog_sink* srslog_fetch_stdout_sink(void); /** * Returns an instance of a sink that writes to the stderr stream. */ srslog_sink* srslog_fetch_stderr_sink(void); /** * Returns an instance of a sink that writes into a file in the specified path. * Specifying a max_size value different to zero will make the sink create a * new file each time the current file exceeds this value. The units of * max_size are bytes. * Setting force_flush to true will flush the sink after every write. * NOTE: Any '#' characters in the id will get removed. */ srslog_sink* srslog_fetch_file_sink(const char* path, size_t max_size, srslog_bool force_flush); #ifdef __cplusplus } #endif #endif