libosmocore  1.4.0.80-4fb27
Osmocom core library
Osmocom logging framework

libosmocore Logging sub-system More...

Files

file  logging.c
 Debugging/Logging support code.
 
file  logging_gsmtap.c
 libosmocore log output encapsulated in GSMTAP.
 
file  logging_syslog.c
 Syslog logging support code.
 

Data Structures

struct  log_category
 Configuration of single log category / sub-system. More...
 
struct  log_info_cat
 Information regarding one logging category. More...
 
struct  log_context
 Log context information, passed to filter. More...
 
struct  log_info
 Logging configuration, passed to log_init. More...
 
struct  log_target
 structure representing a logging target More...
 

Macros

#define LOG_MAX_CTX   8
 Maximum number of logging contexts. More...
 
#define LOG_MAX_FILTERS   8
 Maximum number of logging filters. More...
 
#define DEBUG
 
#define DEBUGP(ss, fmt, args...)   LOGP(ss, LOGL_DEBUG, fmt, ##args)
 Log a debug message through the Osmocom logging framework. More...
 
#define DEBUGPC(ss, fmt, args...)   LOGPC(ss, LOGL_DEBUG, fmt, ##args)
 
#define LOGP(ss, level, fmt, args...)   LOGPSRC(ss, level, NULL, 0, fmt, ## args)
 Log a new message through the Osmocom logging framework. More...
 
#define LOGPC(ss, level, fmt, args...)
 Continue a log message through the Osmocom logging framework. More...
 
#define LOGPSRC(ss, level, caller_file, caller_line, fmt, args...)   LOGPSRCC(ss, level, caller_file, caller_line, 0, fmt, ##args)
 Log through the Osmocom logging framework with explicit source. More...
 
#define LOGPSRCC(ss, level, caller_file, caller_line, cont, fmt, args...)
 Log through the Osmocom logging framework with explicit source. More...
 
#define LOGL_DEBUG   1
 different log levels More...
 
#define LOGL_INFO   3
 general information More...
 
#define LOGL_NOTICE   5
 abnormal/unexpected condition More...
 
#define LOGL_ERROR   7
 error condition, requires user action More...
 
#define LOGL_FATAL   8
 fatal, program aborted More...
 
#define DLGLOBAL   -1
 global logging More...
 
#define DLLAPD   -2
 LAPD implementation. More...
 
#define DLINP   -3
 (A-bis) Input sub-system More...
 
#define DLMUX   -4
 Osmocom Multiplex (Osmux) More...
 
#define DLMI   -5
 ISDN-layer below input sub-system. More...
 
#define DLMIB   -6
 ISDN layer B-channel. More...
 
#define DLSMS   -7
 SMS sub-system. More...
 
#define DLCTRL   -8
 Control Interface. More...
 
#define DLGTP   -9
 GTP (GPRS Tunneling Protocol. More...
 
#define DLSTATS   -10
 Statistics. More...
 
#define DLGSUP   -11
 Generic Subscriber Update Protocol. More...
 
#define DLOAP   -12
 Osmocom Authentication Protocol. More...
 
#define DLSS7   -13
 Osmocom SS7. More...
 
#define DLSCCP   -14
 Osmocom SCCP. More...
 
#define DLSUA   -15
 Osmocom SUA. More...
 
#define DLM3UA   -16
 Osmocom M3UA. More...
 
#define DLMGCP   -17
 Osmocom MGCP. More...
 
#define DLJIBUF   -18
 Osmocom Jitter Buffer. More...
 
#define DLRSPRO   -19
 Osmocom Remote SIM Protocol. More...
 
#define DLNS   -20
 Osmocom NS layer. More...
 
#define OSMO_NUM_DLIB   20
 Number of logging sub-systems in libraries. More...
 
#define OSMO_LOGCOLOR_NORMAL   NULL
 
#define OSMO_LOGCOLOR_RED   "\033[1;31m"
 
#define OSMO_LOGCOLOR_GREEN   "\033[1;32m"
 
#define OSMO_LOGCOLOR_YELLOW   "\033[1;33m"
 
#define OSMO_LOGCOLOR_BLUE   "\033[1;34m"
 
#define OSMO_LOGCOLOR_PURPLE   "\033[1;35m"
 
#define OSMO_LOGCOLOR_CYAN   "\033[1;36m"
 
#define OSMO_LOGCOLOR_DARKRED   "\033[31m"
 
#define OSMO_LOGCOLOR_DARKGREEN   "\033[32m"
 
#define OSMO_LOGCOLOR_DARKYELLOW   "\033[33m"
 
#define OSMO_LOGCOLOR_DARKBLUE   "\033[34m"
 
#define OSMO_LOGCOLOR_DARKPURPLE   "\033[35m"
 
#define OSMO_LOGCOLOR_DARKCYAN   "\033[36m"
 
#define OSMO_LOGCOLOR_DARKGREY   "\033[1;30m"
 
#define OSMO_LOGCOLOR_GREY   "\033[37m"
 
#define OSMO_LOGCOLOR_BRIGHTWHITE   "\033[1;37m"
 
#define OSMO_LOGCOLOR_END   "\033[0;m"
 
#define LOG_FILTER_ALL   (1<<LOG_FLT_ALL)
 Compatibility with older libosmocore versions. More...
 
#define GPRS_CTX_NSVC   LOG_CTX_GB_NSVC
 Compatibility with older libosmocore versions. More...
 
#define GPRS_CTX_BVC   LOG_CTX_GB_BVC
 Compatibility with older libosmocore versions. More...
 
#define LOG_MTX_DEBUG   0
 
#define log_tgt_mutex_lock()   log_tgt_mutex_lock_impl()
 
#define log_tgt_mutex_unlock()   log_tgt_mutex_unlock_impl()
 
#define INT2IDX(x)   (-1*(x)-1)
 
#define GSMTAP_LOG_MAX_SIZE   4096
 

Typedefs

typedef int log_filter(const struct log_context *ctx, struct log_target *target)
 Log filter function. More...
 
typedef void log_print_filters(struct vty *vty, const struct log_info *info, const struct log_target *tgt)
 
typedef void log_save_filters(struct vty *vty, const struct log_info *info, const struct log_target *tgt)
 

Enumerations

enum  log_ctx_index {
  LOG_CTX_GB_NSVC,
  LOG_CTX_GB_BVC,
  LOG_CTX_BSC_SUBSCR,
  LOG_CTX_VLR_SUBSCR,
  LOG_CTX_L1_SAPI,
  _LOG_CTX_COUNT
}
 Indexes to indicate the object currently acted upon. More...
 
enum  log_filter_index {
  LOG_FLT_ALL,
  LOG_FLT_GB_NSVC,
  LOG_FLT_GB_BVC,
  LOG_FLT_BSC_SUBSCR,
  LOG_FLT_VLR_SUBSCR,
  LOG_FLT_L1_SAPI,
  _LOG_FLT_COUNT
}
 Indexes to indicate objects that should be logged. More...
 
enum  log_target_type {
  LOG_TGT_TYPE_VTY,
  LOG_TGT_TYPE_SYSLOG,
  LOG_TGT_TYPE_FILE,
  LOG_TGT_TYPE_STDERR,
  LOG_TGT_TYPE_STRRB,
  LOG_TGT_TYPE_GSMTAP
}
 Type of logging target. More...
 
enum  log_filename_type {
  LOG_FILENAME_NONE,
  LOG_FILENAME_PATH,
  LOG_FILENAME_BASENAME
}
 Whether/how to log the source filename (and line number). More...
 
enum  log_filename_pos {
  LOG_FILENAME_POS_HEADER_END,
  LOG_FILENAME_POS_LINE_END
}
 Where on a log line source file and line should be logged. More...
 

Functions

void osmo_vlogp (int subsys, int level, const char *file, int line, int cont, const char *format, va_list ap)
 vararg version of logging function More...
 
void logp (int subsys, const char *file, int line, int cont, const char *format,...)
 logging function used by DEBUGP() macro More...
 
void logp2 (int subsys, unsigned int level, const char *file, int line, int cont, const char *format,...)
 logging function used by LOGP() macro More...
 
void int log_init (const struct log_info *inf, void *ctx)
 Initialize the Osmocom logging core. More...
 
void log_fini (void)
 
int log_check_level (int subsys, unsigned int level)
 Check whether a log entry will be generated. More...
 
void log_reset_context (void)
 Reset (clear) the logging context. More...
 
int log_set_context (uint8_t ctx_nr, void *value)
 Set the logging context. More...
 
void log_set_all_filter (struct log_target *target, int all)
 Enable the LOG_FLT_ALL log filter. More...
 
void log_set_use_color (struct log_target *target, int use_color)
 Enable or disable the use of colored output. More...
 
void log_set_print_extended_timestamp (struct log_target *target, int print_timestamp)
 Enable or disable printing of extended timestamps while logging. More...
 
void log_set_print_timestamp (struct log_target *target, int print_timestamp)
 Enable or disable printing of timestamps while logging. More...
 
void log_set_print_filename (struct log_target *target, int print_filename)
 Use log_set_print_filename2() instead. More...
 
void log_set_print_filename2 (struct log_target *target, enum log_filename_type lft)
 Enable or disable printing of the filename while logging. More...
 
void log_set_print_filename_pos (struct log_target *target, enum log_filename_pos pos)
 Set the position where on a log line the source file info should be logged. More...
 
void log_set_print_category (struct log_target *target, int print_category)
 Enable or disable printing of the category name. More...
 
void log_set_print_category_hex (struct log_target *target, int print_category_hex)
 Enable or disable printing of the category number in hex ('<000b>'). More...
 
void log_set_print_level (struct log_target *target, int print_level)
 Enable or disable printing of the log level name. More...
 
void log_set_log_level (struct log_target *target, int log_level)
 Set the global log level for a given log target. More...
 
void log_parse_category_mask (struct log_target *target, const char *_mask)
 parse the log category mask More...
 
const char * log_category_name (int subsys)
 
int log_parse_level (const char *lvl)
 Parse a human-readable log level into a numeric value. More...
 
const char * log_level_str (unsigned int lvl)
 convert a numeric log level into human-readable string More...
 
int log_parse_category (const char *category)
 parse a human-readable log category into numeric form More...
 
void log_set_category_filter (struct log_target *target, int category, int enable, int level)
 Set a category filter on a given log target. More...
 
struct log_targetlog_target_create (void)
 Create a new log target skeleton. More...
 
void log_target_destroy (struct log_target *target)
 Unregister, close and delete a log target. More...
 
struct log_targetlog_target_create_stderr (void)
 Create the STDERR log target. More...
 
struct log_targetlog_target_create_file (const char *fname)
 Create a new file-based log target. More...
 
struct log_targetlog_target_create_syslog (const char *ident, int option, int facility)
 Create a new logging target for syslog logging. More...
 
struct log_targetlog_target_create_gsmtap (const char *host, uint16_t port, const char *ident, bool ofd_wq_mode, bool add_sink)
 Create a new logging target for GSMTAP logging. More...
 
int log_target_file_reopen (struct log_target *target)
 close and re-open a log file (for log file rotation) More...
 
int log_targets_reopen (void)
 close and re-open all log files (for log file rotation) More...
 
void log_add_target (struct log_target *target)
 Register a new log target with the logging core. More...
 
void log_del_target (struct log_target *target)
 Unregister a log target from the logging core. More...
 
struct log_targetlog_target_find (int type, const char *fname)
 Find a registered log target. More...
 
void log_enable_multithread (void)
 Enable multithread support (mutex) in libosmocore logging system. More...
 
void log_tgt_mutex_lock_impl (void)
 Acquire the osmo_log_tgt_mutex. More...
 
void log_tgt_mutex_unlock_impl (void)
 Release the osmo_log_tgt_mutex. More...
 
 osmo_static_assert (_LOG_CTX_COUNT<=ARRAY_SIZE(((struct log_context *) NULL) ->ctx), enum_logging_ctx_items_fit_in_struct_log_context)
 
 osmo_static_assert (_LOG_FLT_COUNT<=ARRAY_SIZE(((struct log_target *) NULL) ->filter_data), enum_logging_filters_fit_in_log_target_filter_data)
 
 osmo_static_assert (_LOG_FLT_COUNT<=8 *sizeof(((struct log_target *) NULL) ->filter_map), enum_logging_filters_fit_in_log_target_filter_map)
 
 LLIST_HEAD (osmo_log_target_list)
 
void assert_loginfo (const char *src)
 
static int subsys_lib2index (int subsys)
 
static const char * color (int subsys)
 
static const char * level_color (int level)
 
static const char * const_basename (const char *path)
 
static void _output (struct log_target *target, unsigned int subsys, unsigned int level, const char *file, int line, int cont, const char *format, va_list ap)
 
static int map_subsys (int subsys)
 
static bool should_log_to_target (struct log_target *tar, int subsys, int level)
 
static void _file_output (struct log_target *target, unsigned int level, const char *log)
 
static void _gsmtap_raw_output (struct log_target *target, int subsys, unsigned int level, const char *file, int line, int cont, const char *format, va_list ap)
 
static int logp2syslog_level (unsigned int level)
 
static void _syslog_output (struct log_target *target, unsigned int level, const char *log)
 

Variables

struct log_infoosmo_log_info
 
static struct log_context log_context
 
void * tall_log_ctx = NULL
 
static pthread_mutex_t osmo_log_tgt_mutex
 This mutex must be held while using osmo_log_target_list or any of its log_targets in a multithread program. More...
 
static bool osmo_log_tgt_mutex_on = false
 
const struct value_string loglevel_strs []
 
static const struct log_info_cat internal_cat [OSMO_NUM_DLIB]
 
static const struct value_string level_colors []
 

Detailed Description

libosmocore Logging sub-system

Macro Definition Documentation

◆ DEBUG

#define DEBUG

◆ DEBUGP

#define DEBUGP (   ss,
  fmt,
  args... 
)    LOGP(ss, LOGL_DEBUG, fmt, ##args)

Log a debug message through the Osmocom logging framework.

Parameters
[in]sslogging subsystem (e.g. DLGLOBAL)
[in]fmtformat string
[in]argsvariable argument list

Referenced by rate_ctrl_group_desc_validate().

◆ DEBUGPC

#define DEBUGPC (   ss,
  fmt,
  args... 
)    LOGPC(ss, LOGL_DEBUG, fmt, ##args)

◆ DLCTRL

#define DLCTRL   -8

Control Interface.

◆ DLGLOBAL

◆ DLGSUP

#define DLGSUP   -11

Generic Subscriber Update Protocol.

◆ DLGTP

#define DLGTP   -9

GTP (GPRS Tunneling Protocol.

◆ DLINP

#define DLINP   -3

(A-bis) Input sub-system

◆ DLJIBUF

#define DLJIBUF   -18

Osmocom Jitter Buffer.

◆ DLLAPD

#define DLLAPD   -2

LAPD implementation.

◆ DLM3UA

#define DLM3UA   -16

Osmocom M3UA.

◆ DLMGCP

#define DLMGCP   -17

Osmocom MGCP.

◆ DLMI

#define DLMI   -5

ISDN-layer below input sub-system.

◆ DLMIB

#define DLMIB   -6

ISDN layer B-channel.

◆ DLMUX

#define DLMUX   -4

Osmocom Multiplex (Osmux)

◆ DLNS

#define DLNS   -20

Osmocom NS layer.

◆ DLOAP

#define DLOAP   -12

Osmocom Authentication Protocol.

◆ DLRSPRO

#define DLRSPRO   -19

Osmocom Remote SIM Protocol.

◆ DLSCCP

#define DLSCCP   -14

Osmocom SCCP.

◆ DLSMS

#define DLSMS   -7

SMS sub-system.

◆ DLSS7

#define DLSS7   -13

Osmocom SS7.

◆ DLSTATS

#define DLSTATS   -10

◆ DLSUA

#define DLSUA   -15

Osmocom SUA.

◆ GPRS_CTX_BVC

#define GPRS_CTX_BVC   LOG_CTX_GB_BVC

Compatibility with older libosmocore versions.

◆ GPRS_CTX_NSVC

#define GPRS_CTX_NSVC   LOG_CTX_GB_NSVC

Compatibility with older libosmocore versions.

◆ GSMTAP_LOG_MAX_SIZE

#define GSMTAP_LOG_MAX_SIZE   4096

Referenced by _gsmtap_raw_output().

◆ INT2IDX

#define INT2IDX (   x)    (-1*(x)-1)

◆ LOG_FILTER_ALL

#define LOG_FILTER_ALL   (1<<LOG_FLT_ALL)

Compatibility with older libosmocore versions.

◆ LOG_MAX_CTX

#define LOG_MAX_CTX   8

Maximum number of logging contexts.

Referenced by log_set_context().

◆ LOG_MAX_FILTERS

#define LOG_MAX_FILTERS   8

Maximum number of logging filters.

◆ LOG_MTX_DEBUG

#define LOG_MTX_DEBUG   0

◆ log_tgt_mutex_lock

#define log_tgt_mutex_lock ( )    log_tgt_mutex_lock_impl()

◆ log_tgt_mutex_unlock

#define log_tgt_mutex_unlock ( )    log_tgt_mutex_unlock_impl()

◆ LOGL_DEBUG

#define LOGL_DEBUG   1

different log levels

debugging information

Referenced by logp().

◆ LOGL_ERROR

◆ LOGL_FATAL

#define LOGL_FATAL   8

fatal, program aborted

Referenced by _msgb_eq(), level_color(), logp2syslog_level(), and msgb_alloc_c().

◆ LOGL_INFO

#define LOGL_INFO   3

◆ LOGL_NOTICE

#define LOGL_NOTICE   5

◆ LOGP

◆ LOGPC

#define LOGPC (   ss,
  level,
  fmt,
  args... 
)
Value:
do { \
if (log_check_level(ss, level)) \
logp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args); \
} while(0)
uint8_t level
logging level
Definition: gsmtap.h:126
int log_check_level(int subsys, unsigned int level)
Check whether a log entry will be generated.
Definition: logging.c:1121

Continue a log message through the Osmocom logging framework.

Parameters
[in]sslogging subsystem (e.g. DLGLOBAL)
[in]levellogging level (e.g. LOGL_NOTICE)
[in]fmtformat string
[in]argsvariable argument list

Referenced by _msgb_eq().

◆ LOGPSRC

#define LOGPSRC (   ss,
  level,
  caller_file,
  caller_line,
  fmt,
  args... 
)    LOGPSRCC(ss, level, caller_file, caller_line, 0, fmt, ##args)

Log through the Osmocom logging framework with explicit source.

If caller_file is passed as NULL, FILE and LINE are used instead of caller_file and caller_line (so that this macro here defines both cases in the same place, and to catch cases where callers fail to pass a non-null filename string).

Parameters
[in]sslogging subsystem (e.g. DLGLOBAL)
[in]levellogging level (e.g. LOGL_NOTICE)
[in]caller_filecaller's source file string (e.g. FILE)
[in]caller_linecaller's source line nr (e.g. LINE)
[in]fmtformat string
[in]argsvariable argument list

Referenced by _msgb_eq(), and _osmo_fsm_inst_dispatch().

◆ LOGPSRCC

#define LOGPSRCC (   ss,
  level,
  caller_file,
  caller_line,
  cont,
  fmt,
  args... 
)
Value:
do { \
if (log_check_level(ss, level)) {\
if (caller_file) \
logp2(ss, level, caller_file, caller_line, cont, fmt, ##args); \
logp2(ss, level, __FILE__, __LINE__, cont, fmt, ##args); \
}\
} while(0)
uint8_t level
logging level
Definition: gsmtap.h:126
int log_check_level(int subsys, unsigned int level)
Check whether a log entry will be generated.
Definition: logging.c:1121
void logp2(int subsys, unsigned int level, const char *file, int line, int cont, const char *format,...) __attribute__((format(printf
logging function used by LOGP() macro
Definition: logging.c:641

Log through the Osmocom logging framework with explicit source.

If caller_file is passed as NULL, FILE and LINE are used instead of caller_file and caller_line (so that this macro here defines both cases in the same place, and to catch cases where callers fail to pass a non-null filename string).

Parameters
[in]sslogging subsystem (e.g. DLGLOBAL)
[in]levellogging level (e.g. LOGL_NOTICE)
[in]caller_filecaller's source file string (e.g. FILE)
[in]caller_linecaller's source line nr (e.g. LINE)
[in]contcontinuation (1) or new line (0)
[in]fmtformat string
[in]argsvariable argument list

◆ OSMO_LOGCOLOR_BLUE

#define OSMO_LOGCOLOR_BLUE   "\033[1;34m"

◆ OSMO_LOGCOLOR_BRIGHTWHITE

#define OSMO_LOGCOLOR_BRIGHTWHITE   "\033[1;37m"

◆ OSMO_LOGCOLOR_CYAN

#define OSMO_LOGCOLOR_CYAN   "\033[1;36m"

◆ OSMO_LOGCOLOR_DARKBLUE

#define OSMO_LOGCOLOR_DARKBLUE   "\033[34m"

◆ OSMO_LOGCOLOR_DARKCYAN

#define OSMO_LOGCOLOR_DARKCYAN   "\033[36m"

◆ OSMO_LOGCOLOR_DARKGREEN

#define OSMO_LOGCOLOR_DARKGREEN   "\033[32m"

◆ OSMO_LOGCOLOR_DARKGREY

#define OSMO_LOGCOLOR_DARKGREY   "\033[1;30m"

◆ OSMO_LOGCOLOR_DARKPURPLE

#define OSMO_LOGCOLOR_DARKPURPLE   "\033[35m"

◆ OSMO_LOGCOLOR_DARKRED

#define OSMO_LOGCOLOR_DARKRED   "\033[31m"

◆ OSMO_LOGCOLOR_DARKYELLOW

#define OSMO_LOGCOLOR_DARKYELLOW   "\033[33m"

◆ OSMO_LOGCOLOR_END

#define OSMO_LOGCOLOR_END   "\033[0;m"

Referenced by _output().

◆ OSMO_LOGCOLOR_GREEN

#define OSMO_LOGCOLOR_GREEN   "\033[1;32m"

◆ OSMO_LOGCOLOR_GREY

#define OSMO_LOGCOLOR_GREY   "\033[37m"

◆ OSMO_LOGCOLOR_NORMAL

#define OSMO_LOGCOLOR_NORMAL   NULL

◆ OSMO_LOGCOLOR_PURPLE

#define OSMO_LOGCOLOR_PURPLE   "\033[1;35m"

◆ OSMO_LOGCOLOR_RED

#define OSMO_LOGCOLOR_RED   "\033[1;31m"

◆ OSMO_LOGCOLOR_YELLOW

#define OSMO_LOGCOLOR_YELLOW   "\033[1;33m"

◆ OSMO_NUM_DLIB

#define OSMO_NUM_DLIB   20

Number of logging sub-systems in libraries.

Typedef Documentation

◆ log_filter

typedef int log_filter(const struct log_context *ctx, struct log_target *target)

Log filter function.

◆ log_print_filters

typedef void log_print_filters(struct vty *vty, const struct log_info *info, const struct log_target *tgt)

◆ log_save_filters

typedef void log_save_filters(struct vty *vty, const struct log_info *info, const struct log_target *tgt)

Enumeration Type Documentation

◆ log_ctx_index

Indexes to indicate the object currently acted upon.

Array indexes for the global log_context array.

Enumerator
LOG_CTX_GB_NSVC 
LOG_CTX_GB_BVC 
LOG_CTX_BSC_SUBSCR 
LOG_CTX_VLR_SUBSCR 
LOG_CTX_L1_SAPI 
_LOG_CTX_COUNT 

◆ log_filename_pos

Where on a log line source file and line should be logged.

Enumerator
LOG_FILENAME_POS_HEADER_END 
LOG_FILENAME_POS_LINE_END 

◆ log_filename_type

Whether/how to log the source filename (and line number).

Enumerator
LOG_FILENAME_NONE 
LOG_FILENAME_PATH 
LOG_FILENAME_BASENAME 

◆ log_filter_index

Indexes to indicate objects that should be logged.

Array indexes to log_target->filter_data and bit indexes for log_target->filter_map.

Enumerator
LOG_FLT_ALL 
LOG_FLT_GB_NSVC 
LOG_FLT_GB_BVC 
LOG_FLT_BSC_SUBSCR 
LOG_FLT_VLR_SUBSCR 
LOG_FLT_L1_SAPI 
_LOG_FLT_COUNT 

◆ log_target_type

Type of logging target.

Enumerator
LOG_TGT_TYPE_VTY 

VTY logging.

LOG_TGT_TYPE_SYSLOG 

syslog based logging

LOG_TGT_TYPE_FILE 

text file logging

LOG_TGT_TYPE_STDERR 

stderr logging

LOG_TGT_TYPE_STRRB 

osmo_strrb-backed logging

LOG_TGT_TYPE_GSMTAP 

GSMTAP network logging.

Function Documentation

◆ _file_output()

static void _file_output ( struct log_target target,
unsigned int  level,
const char *  log 
)
static

◆ _gsmtap_raw_output()

◆ _output()

◆ _syslog_output()

static void _syslog_output ( struct log_target target,
unsigned int  level,
const char *  log 
)
static

References logp2syslog_level().

Referenced by log_target_create_syslog().

◆ assert_loginfo()

void assert_loginfo ( const char *  src)

◆ color()

static const char* color ( int  subsys)
static

References log_info::cat, log_info_cat::color, and subsys.

Referenced by _output(), and rb_erase().

◆ const_basename()

static const char* const_basename ( const char *  path)
static

Referenced by _output().

◆ level_color()

static const char* level_color ( int  level)
static

◆ LLIST_HEAD()

LLIST_HEAD ( osmo_log_target_list  )

◆ log_add_target()

void log_add_target ( struct log_target target)

Register a new log target with the logging core.

Parameters
[in]targetLog target to be registered

References log_target::entry, llist_add_tail(), and osmo_log_target_list.

Referenced by osmo_init_logging2().

◆ log_category_name()

const char * log_category_name ( int  subsys)

References log_info::cat, log_info_cat::name, and subsys.

Referenced by _gsmtap_raw_output(), and _output().

◆ log_check_level()

int log_check_level ( int  subsys,
unsigned int  level 
)

Check whether a log entry will be generated.

Returns
!= 0 if a log entry might get generated by at least one target

References assert_loginfo(), log_target::entry, llist_for_each_entry, log_tgt_mutex_lock, log_tgt_mutex_unlock, map_subsys(), osmo_log_target_list, and should_log_to_target().

◆ log_del_target()

void log_del_target ( struct log_target target)

Unregister a log target from the logging core.

Parameters
[in]targetLog target to be unregistered

References log_target::entry, and llist_del().

Referenced by log_target_destroy().

◆ log_enable_multithread()

void log_enable_multithread ( void  )

Enable multithread support (mutex) in libosmocore logging system.

Must be called by processes willing to use logging subsystem from several threads. Once enabled, it's not possible to disable it again.

Referenced by log_tgt_mutex_unlock_impl().

◆ log_fini()

◆ log_init()

int log_init ( const struct log_info inf,
void *  ctx 
)

Initialize the Osmocom logging core.

Parameters
[in]infInformation regarding logging categories, could be NULL
[in]ctxtalloc context for logging allocations
Returns
0 in case of success, negative in case of error

If inf is NULL then only library-internal categories are initialized.

References ARRAY_SIZE, log_info::cat, log_info::filter_fn, LOGL_NOTICE, log_info_cat::loglevel, log_info::num_cat, log_info::num_cat_user, and OSMO_ASSERT.

Referenced by osmo_init_logging2().

◆ log_level_str()

const char * log_level_str ( unsigned int  lvl)

convert a numeric log level into human-readable string

Parameters
[in]lvlnumeric log level
Returns
zero-terminated string (log level name)

References get_value_string().

Referenced by _output().

◆ log_parse_category()

int log_parse_category ( const char *  category)

parse a human-readable log category into numeric form

Parameters
[in]categoryhuman-readable log category name
Returns
numeric category value, or -EINVAL otherwise

References assert_loginfo(), log_info::cat, log_info_cat::name, and log_info::num_cat.

◆ log_parse_category_mask()

void log_parse_category_mask ( struct log_target target,
const char *  _mask 
)

parse the log category mask

Parameters
[in]targetlog target to be configured
[in]_masklog category mask string

The format can be this: category1:category2:category3 or category1,2:category2,3:...

References assert_loginfo(), log_info::cat, log_target::categories, log_category::enabled, length, level, log_category::loglevel, log_info_cat::name, log_info::num_cat, and OSMO_ASSERT.

◆ log_parse_level()

int log_parse_level ( const char *  lvl)

Parse a human-readable log level into a numeric value.

Parameters
[in]lvlzero-terminated string containing log level name
Returns
numeric log level

References get_string_value().

◆ log_reset_context()

void log_reset_context ( void  )

Reset (clear) the logging context.

Referenced by osmo_fd_disp_fds().

◆ log_set_all_filter()

void log_set_all_filter ( struct log_target target,
int  all 
)

Enable the LOG_FLT_ALL log filter.

Parameters
[in]targetLog target to be affected
[in]allenable (1) or disable (0) the ALL filter

When the LOG_FLT_ALL filter is enabled, all log messages will be printed. It acts as a wildcard. Setting it to 1 means there is no filtering.

References log_target::filter_map, and LOG_FLT_ALL.

Referenced by osmo_init_logging2().

◆ log_set_category_filter()

void log_set_category_filter ( struct log_target target,
int  category,
int  enable,
int  level 
)

Set a category filter on a given log target.

Parameters
[in]targetLog target to be affected
[in]categoryLog category to be affected
[in]enablewhether to enable or disable the filter
[in]levelLog level of the filter

References log_target::categories, log_category::enabled, level, log_category::loglevel, and map_subsys().

◆ log_set_context()

int log_set_context ( uint8_t  ctx_nr,
void *  value 
)

Set the logging context.

Parameters
[in]ctx_nrlogging context number
[in]valuevalue to which the context is to be set
Returns
0 in case of success; negative otherwise

A logging context is something like the subscriber identity to which the currently processed message relates, or the BTS through which it was received. As soon as this data is known, it can be set using this function. The main use of context information is for logging filters.

References log_context::ctx, and LOG_MAX_CTX.

◆ log_set_log_level()

void log_set_log_level ( struct log_target target,
int  log_level 
)

Set the global log level for a given log target.

Parameters
[in]targetLog target to be affected
[in]log_levelNew global log level

References log_target::loglevel.

◆ log_set_print_category()

void log_set_print_category ( struct log_target target,
int  print_category 
)

Enable or disable printing of the category name.

Parameters
[in]targetLog target to be affected
[in]print_categoryEnable (1) or disable (0) filenames

Print the category/subsys name in front of every log message.

References log_target::print_category.

◆ log_set_print_category_hex()

void log_set_print_category_hex ( struct log_target target,
int  print_category_hex 
)

Enable or disable printing of the category number in hex ('<000b>').

Parameters
[in]targetLog target to be affected.
[in]print_category_hexEnable (1) or disable (0) hex category.

References log_target::print_category_hex.

Referenced by log_set_print_filename().

◆ log_set_print_extended_timestamp()

void log_set_print_extended_timestamp ( struct log_target target,
int  print_timestamp 
)

Enable or disable printing of extended timestamps while logging.

Parameters
[in]targetLog target to be affected
[in]print_timestampEnable (1) or disable (0) timestamps

When both timestamp and extended timestamp is enabled then only the extended timestamp will be used. The format of the timestamp is YYYYMMDDhhmmssnnn.

References log_target::print_ext_timestamp, and log_target::print_timestamp.

◆ log_set_print_filename()

void log_set_print_filename ( struct log_target target,
int  print_filename 
)

Use log_set_print_filename2() instead.

Call log_set_print_filename2() with LOG_FILENAME_PATH or LOG_FILENAME_NONE, as well as call log_set_print_category_hex() with the argument passed to this function. This is to mirror legacy behavior, which combined the category in hex with the filename. For example, if the category-hex output were no longer affected by log_set_print_filename(), many unit tests (in libosmocore as well as dependent projects) would fail since they expect the category to disappear along with the filename.

Parameters
[in]targetLog target to be affected
[in]print_filenameEnable (1) or disable (0) filenames

References LOG_FILENAME_NONE, LOG_FILENAME_PATH, log_set_print_category_hex(), and log_set_print_filename2().

◆ log_set_print_filename2()

void log_set_print_filename2 ( struct log_target target,
enum log_filename_type  lft 
)

Enable or disable printing of the filename while logging.

Parameters
[in]targetLog target to be affected.
[in]lftAn LOG_FILENAME_* enum value. LOG_FILENAME_NONE omits the source file and line information from logs. LOG_FILENAME_PATH prints the entire source file path as passed to LOGP macros.

References log_target::print_filename2.

Referenced by log_set_print_filename().

◆ log_set_print_filename_pos()

void log_set_print_filename_pos ( struct log_target target,
enum log_filename_pos  pos 
)

Set the position where on a log line the source file info should be logged.

Parameters
[in]targetLog target to be affected.
[in]posA LOG_FILENAME_POS_* enum value. LOG_FILENAME_POS_DEFAULT logs just before the caller supplied log message. LOG_FILENAME_POS_LAST logs only at the end of a log line, where the caller issued an '
' to end the

References log_target::print_filename_pos.

◆ log_set_print_level()

void log_set_print_level ( struct log_target target,
int  print_level 
)

Enable or disable printing of the log level name.

Parameters
[in]targetLog target to be affected
[in]print_levelEnable (1) or disable (0) log level name

Print the log level name in front of every log message.

References log_target::print_level.

◆ log_set_print_timestamp()

void log_set_print_timestamp ( struct log_target target,
int  print_timestamp 
)

Enable or disable printing of timestamps while logging.

Parameters
[in]targetLog target to be affected
[in]print_timestampEnable (1) or disable (0) timestamps

References log_target::print_timestamp.

◆ log_set_use_color()

void log_set_use_color ( struct log_target target,
int  use_color 
)

Enable or disable the use of colored output.

Parameters
[in]targetLog target to be affected
[in]use_colorUse color (1) or don't use color (0)

References log_target::use_color.

◆ log_target_create()

◆ log_target_create_file()

struct log_target * log_target_create_file ( const char *  fname)

Create a new file-based log target.

Parameters
[in]fnameFile name of the new log file
Returns
Log target in case of success, NULL otherwise

References _file_output(), log_target_create(), log_target_destroy(), LOG_TGT_TYPE_FILE, log_target::output, log_target::tgt_file, and log_target::type.

◆ log_target_create_gsmtap()

struct log_target * log_target_create_gsmtap ( const char *  host,
uint16_t  port,
const char *  ident,
bool  ofd_wq_mode,
bool  add_sink 
)

Create a new logging target for GSMTAP logging.

Parameters
[in]hostremote host to send the logs to
[in]portremote port to send the logs to
[in]identstring identifier
[in]ofd_wq_moderegister osmo_wqueue (1) or not (0)
[in]add_sinkadd GSMTAP sink or not
Returns
Log target in case of success, NULL in case of error

References _gsmtap_raw_output(), gsmtap_source_add_sink(), gsmtap_source_init(), log_target_create(), log_target_destroy(), LOG_TGT_TYPE_GSMTAP, log_target::raw_output, log_target::tgt_gsmtap, and log_target::type.

◆ log_target_create_stderr()

struct log_target * log_target_create_stderr ( void  )

Create the STDERR log target.

Returns
dynamically-allocated log_target for STDERR

References _file_output(), log_target_create(), LOG_TGT_TYPE_STDERR, log_target::output, log_target::tgt_file, and log_target::type.

Referenced by osmo_init_logging2().

◆ log_target_create_syslog()

struct log_target * log_target_create_syslog ( const char *  ident,
int  option,
int  facility 
)

Create a new logging target for syslog logging.

Parameters
[in]identsyslog string identifier
[in]optionsyslog options
[in]facilitysyslog facility
Returns
Log target in case of success, NULL in case of error

References _syslog_output(), log_target::facility, log_target_create(), LOG_TGT_TYPE_SYSLOG, log_target::output, log_target::tgt_syslog, and log_target::type.

◆ log_target_destroy()

void log_target_destroy ( struct log_target target)

Unregister, close and delete a log target.

Parameters
[in]targetlog target to unregister, close and delete

References log_del_target(), LOG_TGT_TYPE_FILE, LOG_TGT_TYPE_SYSLOG, log_target::tgt_file, and log_target::type.

Referenced by log_fini(), log_target_create_file(), log_target_create_gsmtap(), and log_target_create_rb().

◆ log_target_file_reopen()

int log_target_file_reopen ( struct log_target target)

close and re-open a log file (for log file rotation)

Parameters
[in]targetlog target to re-open
Returns
0 in case of success; negative otherwise

References log_target::tgt_file.

Referenced by log_targets_reopen().

◆ log_target_find()

struct log_target * log_target_find ( int  type,
const char *  fname 
)

Find a registered log target.

Parameters
[in]typeLog target type
[in]fnameFile name
Returns
Log target (if found), NULL otherwise Must be called with mutex osmo_log_tgt_mutex held, see log_tgt_mutex_lock.

References log_target::entry, llist_for_each_entry, LOG_TGT_TYPE_FILE, LOG_TGT_TYPE_GSMTAP, osmo_log_target_list, log_target::tgt_file, log_target::tgt_gsmtap, and log_target::type.

◆ log_targets_reopen()

int log_targets_reopen ( void  )

close and re-open all log files (for log file rotation)

Returns
0 in case of success; negative otherwise

References log_target::entry, llist_for_each_entry, log_target_file_reopen(), log_tgt_mutex_lock, log_tgt_mutex_unlock, LOG_TGT_TYPE_FILE, osmo_log_target_list, and log_target::type.

Referenced by sighup_hdlr().

◆ log_tgt_mutex_lock_impl()

void log_tgt_mutex_lock_impl ( void  )

Acquire the osmo_log_tgt_mutex.

Don't use this function directly, always use macro log_tgt_mutex_lock() instead.

Referenced by log_tgt_mutex_unlock_impl().

◆ log_tgt_mutex_unlock_impl()

void log_tgt_mutex_unlock_impl ( void  )

Release the osmo_log_tgt_mutex.

Don't use this function directly, always use macro log_tgt_mutex_unlock() instead.

References log_enable_multithread(), and log_tgt_mutex_lock_impl().

◆ logp()

void logp ( int  subsys,
const char *  file,
int  line,
int  cont,
const char *  format,
  ... 
)

logging function used by DEBUGP() macro

Parameters
[in]subsysLogging sub-system
[in]filename of source code file
[in]contcontinuation (1) or new line (0)
[in]formatformat string

References LOGL_DEBUG, and osmo_vlogp().

◆ logp2()

void logp2 ( int  subsys,
unsigned int  level,
const char *  file,
int  line,
int  cont,
const char *  format,
  ... 
)

logging function used by LOGP() macro

Parameters
[in]subsysLogging sub-system
[in]levelLog level
[in]filename of source code file
[in]contcontinuation (1) or new line (0)
[in]formatformat string

References osmo_vlogp().

◆ logp2syslog_level()

static int logp2syslog_level ( unsigned int  level)
static

References LOGL_ERROR, LOGL_FATAL, LOGL_INFO, and LOGL_NOTICE.

Referenced by _syslog_output().

◆ map_subsys()

static int map_subsys ( int  subsys)
inlinestatic

◆ osmo_static_assert() [1/3]

osmo_static_assert ( _LOG_CTX_COUNT<=  ARRAY_SIZE((struct log_context *) NULL) ->ctx,
enum_logging_ctx_items_fit_in_struct_log_context   
)

◆ osmo_static_assert() [2/3]

osmo_static_assert ( _LOG_FLT_COUNT<=  ARRAY_SIZE((struct log_target *) NULL) ->filter_data,
enum_logging_filters_fit_in_log_target_filter_data   
)

◆ osmo_static_assert() [3/3]

osmo_static_assert ( _LOG_FLT_COUNT<=8 *  sizeof((struct log_target *) NULL) ->filter_map,
enum_logging_filters_fit_in_log_target_filter_map   
)

◆ osmo_vlogp()

void osmo_vlogp ( int  subsys,
int  level,
const char *  file,
int  line,
int  cont,
const char *  format,
va_list  ap 
)

vararg version of logging function

Parameters
[in]subsysLogging sub-system
[in]levelLog level
[in]filename of source code file
[in]contcontinuation (1) or new line (0)
[in]formatformat string
[in]apvararg-list containing format string arguments

References _output(), log_target::entry, llist_for_each_entry, log_tgt_mutex_lock, log_tgt_mutex_unlock, map_subsys(), osmo_log_target_list, log_target::raw_output, and should_log_to_target().

Referenced by logp(), and logp2().

◆ should_log_to_target()

static bool should_log_to_target ( struct log_target tar,
int  subsys,
int  level 
)
inlinestatic

◆ subsys_lib2index()

static int subsys_lib2index ( int  subsys)
static

References log_info::num_cat_user.

Referenced by map_subsys().

Variable Documentation

◆ internal_cat

const struct log_info_cat internal_cat[OSMO_NUM_DLIB]
static

◆ level_colors

const struct value_string level_colors[]
static
Initial value:
= {
{ LOGL_FATAL, OSMO_LOGCOLOR_RED },
{ 0, NULL }
}
#define LOGL_INFO
general information
Definition: logging.h:103
#define OSMO_LOGCOLOR_YELLOW
Definition: logging.h:135
#define LOGL_DEBUG
different log levels
Definition: logging.h:102
#define OSMO_LOGCOLOR_RED
Definition: logging.h:133
#define OSMO_LOGCOLOR_BLUE
Definition: logging.h:136
#define OSMO_LOGCOLOR_GREEN
Definition: logging.h:134
#define LOGL_ERROR
error condition, requires user action
Definition: logging.h:105
#define LOGL_NOTICE
abnormal/unexpected condition
Definition: logging.h:104
#define LOGL_FATAL
fatal, program aborted
Definition: logging.h:106

◆ log_context

struct log_context log_context
static

◆ loglevel_strs

const struct value_string loglevel_strs[]
Initial value:
= {
{ LOGL_DEBUG, "DEBUG" },
{ LOGL_INFO, "INFO" },
{ LOGL_NOTICE, "NOTICE" },
{ LOGL_ERROR, "ERROR" },
{ LOGL_FATAL, "FATAL" },
{ 0, NULL },
}
#define LOGL_INFO
general information
Definition: logging.h:103
#define LOGL_DEBUG
different log levels
Definition: logging.h:102
#define LOGL_ERROR
error condition, requires user action
Definition: logging.h:105
#define LOGL_NOTICE
abnormal/unexpected condition
Definition: logging.h:104
#define LOGL_FATAL
fatal, program aborted
Definition: logging.h:106

◆ osmo_log_info

struct log_info* osmo_log_info

◆ osmo_log_tgt_mutex

pthread_mutex_t osmo_log_tgt_mutex
static

This mutex must be held while using osmo_log_target_list or any of its log_targets in a multithread program.

Prevents race conditions between threads like producing unordered timestamps or VTY deleting a target while another thread is writing to it

◆ osmo_log_tgt_mutex_on

bool osmo_log_tgt_mutex_on = false
static

◆ tall_log_ctx

void* tall_log_ctx = NULL