You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
5.2 KiB
C

/**
* Copyright 2013-2021 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 <cstddef>
#else
#include <stddef.h>
#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