\doxysection{Osmocom logging framework}
\label{group__logging}\index{Osmocom logging framework@{Osmocom logging framework}}


libosmocore Logging sub-\/system  


\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item 
file \textbf{ logging.\+h}
\item 
file \textbf{ logging.\+c}
\begin{DoxyCompactList}\small\item\em Debugging/\+Logging support code. \end{DoxyCompactList}\item 
file \textbf{ logging\+\_\+gsmtap.\+c}
\begin{DoxyCompactList}\small\item\em libosmocore log output encapsulated in GSMTAP. \end{DoxyCompactList}\item 
file \textbf{ logging\+\_\+syslog.\+c}
\begin{DoxyCompactList}\small\item\em Syslog logging support code. \end{DoxyCompactList}\item 
file \textbf{ logging\+\_\+systemd.\+c}
\end{DoxyCompactItemize}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ log\+\_\+category}
\begin{DoxyCompactList}\small\item\em Configuration of single log category / sub-\/system. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+info\+\_\+cat}
\begin{DoxyCompactList}\small\item\em Information regarding one logging category. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+context}
\begin{DoxyCompactList}\small\item\em Log context information, passed to filter. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+info}
\begin{DoxyCompactList}\small\item\em Logging configuration, passed to \doxyref{log\+\_\+init}{p.}{group__logging_gabf0d1770253db45f43db9344e950a724}. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target}
\begin{DoxyCompactList}\small\item\em structure representing a logging target \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ DEBUG}
\item 
\#define \textbf{ DEBUGP}(ss,  fmt,  args...)~\textbf{ LOGP}(ss, \textbf{ LOGL\+\_\+\+DEBUG}, fmt, \#\#args)
\begin{DoxyCompactList}\small\item\em Log a debug message through the Osmocom logging framework. \end{DoxyCompactList}\item 
\#define \textbf{ DEBUGPC}(ss,  fmt,  args...)~\textbf{ LOGPC}(ss, \textbf{ LOGL\+\_\+\+DEBUG}, fmt, \#\#args)
\item 
\#define \textbf{ LOGP}(ss,  \textbf{ level},  fmt,  args...)~ \textbf{ LOGPSRC}(ss, \textbf{ level}, NULL, 0, fmt, \#\# args)
\begin{DoxyCompactList}\small\item\em Log a new message through the Osmocom logging framework. \end{DoxyCompactList}\item 
\#define \textbf{ LOGPC}(ss,  \textbf{ level},  fmt,  args...)
\begin{DoxyCompactList}\small\item\em Continue a log message through the Osmocom logging framework. \end{DoxyCompactList}\item 
\#define \textbf{ LOGPSRC}(ss,  \textbf{ level},  caller\+\_\+file,  caller\+\_\+line,  fmt,  args...)~ \textbf{ LOGPSRCC}(ss, \textbf{ level}, caller\+\_\+file, caller\+\_\+line, 0, fmt, \#\#args)
\begin{DoxyCompactList}\small\item\em Log through the Osmocom logging framework with explicit source. \end{DoxyCompactList}\item 
\#define \textbf{ LOGPSRCC}(ss,  \textbf{ level},  caller\+\_\+file,  caller\+\_\+line,  cont,  fmt,  args...)
\begin{DoxyCompactList}\small\item\em Log through the Osmocom logging framework with explicit source. \end{DoxyCompactList}\item 
\#define \textbf{ LOGL\+\_\+\+DEBUG}~1
\begin{DoxyCompactList}\small\item\em different log levels \end{DoxyCompactList}\item 
\#define \textbf{ LOGL\+\_\+\+INFO}~3
\begin{DoxyCompactList}\small\item\em general information \end{DoxyCompactList}\item 
\#define \textbf{ LOGL\+\_\+\+NOTICE}~5
\begin{DoxyCompactList}\small\item\em abnormal/unexpected condition \end{DoxyCompactList}\item 
\#define \textbf{ LOGL\+\_\+\+ERROR}~7
\begin{DoxyCompactList}\small\item\em error condition, requires user action \end{DoxyCompactList}\item 
\#define \textbf{ LOGL\+\_\+\+FATAL}~8
\begin{DoxyCompactList}\small\item\em fatal, program aborted \end{DoxyCompactList}\item 
\#define \textbf{ DLGLOBAL}~-\/1
\begin{DoxyCompactList}\small\item\em global logging \end{DoxyCompactList}\item 
\#define \textbf{ DLLAPD}~-\/2
\begin{DoxyCompactList}\small\item\em LAPD implementation. \end{DoxyCompactList}\item 
\#define \textbf{ DLINP}~-\/3
\begin{DoxyCompactList}\small\item\em (A-\/bis) Input sub-\/system \end{DoxyCompactList}\item 
\#define \textbf{ DLMUX}~-\/4
\begin{DoxyCompactList}\small\item\em Osmocom Multiplex (Osmux) \end{DoxyCompactList}\item 
\#define \textbf{ DLMI}~-\/5
\begin{DoxyCompactList}\small\item\em ISDN-\/layer below input sub-\/system. \end{DoxyCompactList}\item 
\#define \textbf{ DLMIB}~-\/6
\begin{DoxyCompactList}\small\item\em ISDN layer B-\/channel. \end{DoxyCompactList}\item 
\#define \textbf{ DLSMS}~-\/7
\begin{DoxyCompactList}\small\item\em SMS sub-\/system. \end{DoxyCompactList}\item 
\#define \textbf{ DLCTRL}~-\/8
\begin{DoxyCompactList}\small\item\em Control Interface. \end{DoxyCompactList}\item 
\#define \textbf{ DLGTP}~-\/9
\begin{DoxyCompactList}\small\item\em GTP (GPRS Tunneling Protocol. \end{DoxyCompactList}\item 
\#define \textbf{ DLSTATS}~-\/10
\begin{DoxyCompactList}\small\item\em Statistics. \end{DoxyCompactList}\item 
\#define \textbf{ DLGSUP}~-\/11
\begin{DoxyCompactList}\small\item\em Generic Subscriber Update Protocol. \end{DoxyCompactList}\item 
\#define \textbf{ DLOAP}~-\/12
\begin{DoxyCompactList}\small\item\em Osmocom Authentication Protocol. \end{DoxyCompactList}\item 
\#define \textbf{ DLSS7}~-\/13
\begin{DoxyCompactList}\small\item\em Osmocom SS7. \end{DoxyCompactList}\item 
\#define \textbf{ DLSCCP}~-\/14
\begin{DoxyCompactList}\small\item\em Osmocom SCCP. \end{DoxyCompactList}\item 
\#define \textbf{ DLSUA}~-\/15
\begin{DoxyCompactList}\small\item\em Osmocom SUA. \end{DoxyCompactList}\item 
\#define \textbf{ DLM3\+UA}~-\/16
\begin{DoxyCompactList}\small\item\em Osmocom M3\+UA. \end{DoxyCompactList}\item 
\#define \textbf{ DLMGCP}~-\/17
\begin{DoxyCompactList}\small\item\em Osmocom MGCP. \end{DoxyCompactList}\item 
\#define \textbf{ DLJIBUF}~-\/18
\begin{DoxyCompactList}\small\item\em Osmocom Jitter Buffer. \end{DoxyCompactList}\item 
\#define \textbf{ DLRSPRO}~-\/19
\begin{DoxyCompactList}\small\item\em Osmocom Remote SIM Protocol. \end{DoxyCompactList}\item 
\#define \textbf{ DLNS}~-\/20
\begin{DoxyCompactList}\small\item\em Osmocom NS layer. \end{DoxyCompactList}\item 
\#define \textbf{ DLBSSGP}~-\/21
\begin{DoxyCompactList}\small\item\em Osmocom BSSGP layer. \end{DoxyCompactList}\item 
\#define \textbf{ DLNSDATA}~-\/22
\begin{DoxyCompactList}\small\item\em Osmocom NS layer data pdus. \end{DoxyCompactList}\item 
\#define \textbf{ DLNSSIGNAL}~-\/23
\begin{DoxyCompactList}\small\item\em Osmocom NS layer signal pdus. \end{DoxyCompactList}\item 
\#define \textbf{ DLIUUP}~-\/24
\begin{DoxyCompactList}\small\item\em Osmocom Iu\+UP layer. \end{DoxyCompactList}\item 
\#define \textbf{ DLPFCP}~-\/25
\begin{DoxyCompactList}\small\item\em Osmocom Packet Forwarding Control Protocol. \end{DoxyCompactList}\item 
\#define \textbf{ DLCSN1}~-\/26
\begin{DoxyCompactList}\small\item\em CSN.\+1 (Concrete Syntax Notation 1) codec. \end{DoxyCompactList}\item 
\#define \textbf{ DLM2\+PA}~-\/27
\begin{DoxyCompactList}\small\item\em Osmocom M2\+PA (libosmo-\/sigtran) \end{DoxyCompactList}\item 
\#define \textbf{ DLM2\+UA}~-\/28
\begin{DoxyCompactList}\small\item\em Reserved for future Osmocom M2\+UA (libosmo-\/sigtran) \end{DoxyCompactList}\item 
\#define \textbf{ DLIO}~-\/29
\begin{DoxyCompactList}\small\item\em Osmocom IO sub-\/system. \end{DoxyCompactList}\item 
\#define \textbf{ OSMO\+\_\+\+NUM\+\_\+\+DLIB}~29
\begin{DoxyCompactList}\small\item\em Number of logging sub-\/systems in libraries. \end{DoxyCompactList}\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+NORMAL}~NULL
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+RED}~\char`\"{}\textbackslash{}033[1;31m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+GREEN}~\char`\"{}\textbackslash{}033[1;32m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+YELLOW}~\char`\"{}\textbackslash{}033[1;33m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+BLUE}~\char`\"{}\textbackslash{}033[1;34m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+PURPLE}~\char`\"{}\textbackslash{}033[1;35m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+CYAN}~\char`\"{}\textbackslash{}033[1;36m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKRED}~\char`\"{}\textbackslash{}033[31m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKGREEN}~\char`\"{}\textbackslash{}033[32m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKYELLOW}~\char`\"{}\textbackslash{}033[33m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKBLUE}~\char`\"{}\textbackslash{}033[34m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKPURPLE}~\char`\"{}\textbackslash{}033[35m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKCYAN}~\char`\"{}\textbackslash{}033[36m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKGREY}~\char`\"{}\textbackslash{}033[1;30m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+GREY}~\char`\"{}\textbackslash{}033[37m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+BRIGHTWHITE}~\char`\"{}\textbackslash{}033[1;37m\char`\"{}
\item 
\#define \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+END}~\char`\"{}\textbackslash{}033[0;m\char`\"{}
\item 
\#define \textbf{ LOG\+\_\+\+MAX\+\_\+\+CTX}~\textbf{ \+\_\+\+LOG\+\_\+\+CTX\+\_\+\+COUNT}
\begin{DoxyCompactList}\small\item\em Maximum number of logging contexts. \end{DoxyCompactList}\item 
\#define \textbf{ LOG\+\_\+\+MAX\+\_\+\+FILTERS}~\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}
\begin{DoxyCompactList}\small\item\em Maximum number of logging filters. \end{DoxyCompactList}\item 
\#define \textbf{ LOG\+\_\+\+FILTER\+\_\+\+ALL}~(1$<$$<$\textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL})
\begin{DoxyCompactList}\small\item\em Compatibility with older libosmocore versions. \end{DoxyCompactList}\item 
\#define \textbf{ GPRS\+\_\+\+CTX\+\_\+\+NSVC}~\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+NSVC}
\begin{DoxyCompactList}\small\item\em Compatibility with older libosmocore versions. \end{DoxyCompactList}\item 
\#define \textbf{ GPRS\+\_\+\+CTX\+\_\+\+BVC}~\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+BVC}
\begin{DoxyCompactList}\small\item\em Compatibility with older libosmocore versions. \end{DoxyCompactList}\item 
\#define \textbf{ LOG\+\_\+\+MTX\+\_\+\+DEBUG}~0
\item 
\#define \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}()~\textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock\+\_\+impl}()
\item 
\#define \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}()~\textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock\+\_\+impl}()
\item 
\#define \textbf{ TRACE}(probe)
\item 
\#define \textbf{ TRACE\+\_\+\+ENABLED}(probe)~(0)
\item 
\#define \textbf{ MAX\+\_\+\+LOG\+\_\+\+SIZE}~4096
\item 
\#define \textbf{ LOG\+\_\+\+WQUEUE\+\_\+\+LEN}~156
\item 
\#define \textbf{ INT2\+IDX}(x)~(-\/1$\ast$(x)-\/1)
\item 
\#define \textbf{ GSMTAP\+\_\+\+LOG\+\_\+\+MAX\+\_\+\+SIZE}~4096
\item 
\#define \textbf{ SD\+\_\+\+JOURNAL\+\_\+\+SUPPRESS\+\_\+\+LOCATION}
\end{DoxyCompactItemize}
\doxysubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef int \textbf{ log\+\_\+filter}(const struct \textbf{ log\+\_\+context} $\ast$ctx, struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em Log filter function. \end{DoxyCompactList}\item 
typedef void \textbf{ log\+\_\+print\+\_\+filters}(struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ log\+\_\+info} $\ast$info, const struct \textbf{ log\+\_\+target} $\ast$tgt)
\item 
typedef void \textbf{ log\+\_\+save\+\_\+filters}(struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ log\+\_\+info} $\ast$info, const struct \textbf{ log\+\_\+target} $\ast$tgt)
\end{DoxyCompactItemize}
\doxysubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \textbf{ log\+\_\+ctx\+\_\+index} \{ \newline
\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+NSVC}
, \newline
\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+BVC}
, \newline
\textbf{ LOG\+\_\+\+CTX\+\_\+\+BSC\+\_\+\+SUBSCR}
, \newline
\textbf{ LOG\+\_\+\+CTX\+\_\+\+VLR\+\_\+\+SUBSCR}
, \newline
\textbf{ LOG\+\_\+\+CTX\+\_\+\+L1\+\_\+\+SAPI}
, \newline
\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+NSE}
, \newline
\textbf{ \+\_\+\+LOG\+\_\+\+CTX\+\_\+\+COUNT}
 \}
\begin{DoxyCompactList}\small\item\em Indexes to indicate the object currently acted upon. \end{DoxyCompactList}\item 
enum \textbf{ log\+\_\+filter\+\_\+index} \{ \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL}
, \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+GB\+\_\+\+NSVC}
, \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+GB\+\_\+\+BVC}
, \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+BSC\+\_\+\+SUBSCR}
, \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+VLR\+\_\+\+SUBSCR}
, \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+L1\+\_\+\+SAPI}
, \newline
\textbf{ LOG\+\_\+\+FLT\+\_\+\+GB\+\_\+\+NSE}
, \newline
\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}
 \}
\begin{DoxyCompactList}\small\item\em Indexes to indicate objects that should be logged. \end{DoxyCompactList}\item 
enum \textbf{ log\+\_\+target\+\_\+type} \{ \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+VTY}
, \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSLOG}
, \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}
, \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}
, \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STRRB}
, \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}
, \newline
\textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSTEMD}
 \}
\begin{DoxyCompactList}\small\item\em Type of logging target. \end{DoxyCompactList}\item 
enum \textbf{ log\+\_\+filename\+\_\+type} \{ \newline
\textbf{ LOG\+\_\+\+FILENAME\+\_\+\+NONE}
, \newline
\textbf{ LOG\+\_\+\+FILENAME\+\_\+\+PATH}
, \newline
\textbf{ LOG\+\_\+\+FILENAME\+\_\+\+BASENAME}
 \}
\begin{DoxyCompactList}\small\item\em Whether/how to log the source filename (and line number). \end{DoxyCompactList}\item 
enum \textbf{ log\+\_\+filename\+\_\+pos} \{ \newline
\textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+HEADER\+\_\+\+END}
, \newline
\textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+LINE\+\_\+\+END}
 \}
\begin{DoxyCompactList}\small\item\em Where on a log line source file and line should be logged. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
void \textbf{ osmo\+\_\+vlogp} (int \textbf{ subsys}, int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format, va\+\_\+list ap)
\begin{DoxyCompactList}\small\item\em vararg version of logging function \end{DoxyCompactList}\item 
void \textbf{ logp} (int \textbf{ subsys}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format,...)
\begin{DoxyCompactList}\small\item\em logging function used by \doxyref{DEBUGP()}{p.}{group__logging_gab805322bc0052e2cb6b6a6557fd59e91} macro \end{DoxyCompactList}\item 
void \textbf{ logp2} (int \textbf{ subsys}, unsigned int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format,...)
\begin{DoxyCompactList}\small\item\em logging function used by \doxyref{LOGP()}{p.}{group__logging_ga7e3a9f703edc9b95a8548a656a6f686d} macro \end{DoxyCompactList}\item 
void void \textbf{ logp\+\_\+stub} (const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format,...)
\item 
int \textbf{ log\+\_\+init} (const struct \textbf{ log\+\_\+info} $\ast$inf, void $\ast$ctx)
\begin{DoxyCompactList}\small\item\em Initialize the Osmocom logging core. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+fini} (void)
\item 
int \textbf{ log\+\_\+check\+\_\+level} (int \textbf{ subsys}, unsigned int \textbf{ level})
\begin{DoxyCompactList}\small\item\em Check whether a log entry will be generated. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+reset\+\_\+context} (void)
\begin{DoxyCompactList}\small\item\em Reset (clear) the logging context. \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+set\+\_\+context} (uint8\+\_\+t ctx\+\_\+nr, void $\ast$value)
\begin{DoxyCompactList}\small\item\em Set the logging context. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+all\+\_\+filter} (struct \textbf{ log\+\_\+target} $\ast$target, int all)
\begin{DoxyCompactList}\small\item\em Enable the \doxyref{LOG\+\_\+\+FLT\+\_\+\+ALL}{p.}{group__logging_gga06c744d8d9104f275d8b8568c09fd144ab84e1400c3d6394a42c59ebb5804d35f} log filter. \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+cache\+\_\+enable} (void)
\begin{DoxyCompactList}\small\item\em Enable the log level lookup cache to bypass string formatting and other code for log statements which are not actually enabled/needed by any existing log target. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+cache\+\_\+update} (int mapped\+\_\+subsys, uint8\+\_\+t enabled, uint8\+\_\+t \textbf{ level})
\begin{DoxyCompactList}\small\item\em Updates single cache entry, caller must hold osmo\+\_\+log\+\_\+tgt\+\_\+mutex. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+use\+\_\+color} (struct \textbf{ log\+\_\+target} $\ast$target, int use\+\_\+color)
\begin{DoxyCompactList}\small\item\em Enable or disable the use of colored output. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+extended\+\_\+timestamp} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+timestamp)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of extended timestamps while logging. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+timestamp} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+timestamp)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of timestamps while logging. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+tid} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+tid)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of timestamps while logging. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+filename} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+filename)
\begin{DoxyCompactList}\small\item\em Use \doxyref{log\+\_\+set\+\_\+print\+\_\+filename2()}{p.}{group__logging_ga878f19493806866c6dbf2d7741aaa9e6} instead. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+filename2} (struct \textbf{ log\+\_\+target} $\ast$target, enum \textbf{ log\+\_\+filename\+\_\+type} lft)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of the filename while logging. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+filename\+\_\+pos} (struct \textbf{ log\+\_\+target} $\ast$target, enum \textbf{ log\+\_\+filename\+\_\+pos} pos)
\begin{DoxyCompactList}\small\item\em Set the position where on a log line the source file info should be logged. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+category} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+category)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of the category name. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+category\+\_\+hex} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+category\+\_\+hex)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of the category number in hex (\textquotesingle{}$<$000b$>$\textquotesingle{}). \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+print\+\_\+level} (struct \textbf{ log\+\_\+target} $\ast$target, int print\+\_\+level)
\begin{DoxyCompactList}\small\item\em Enable or disable printing of the log level name. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+log\+\_\+level} (struct \textbf{ log\+\_\+target} $\ast$target, int log\+\_\+level)
\begin{DoxyCompactList}\small\item\em Set the global log level for a given log target. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+parse\+\_\+category\+\_\+mask} (struct \textbf{ log\+\_\+target} $\ast$target, const char $\ast$\+\_\+mask)
\begin{DoxyCompactList}\small\item\em parse the log category mask \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ log\+\_\+category\+\_\+name} (int \textbf{ subsys})
\item 
int \textbf{ log\+\_\+parse\+\_\+level} (const char $\ast$lvl)
\begin{DoxyCompactList}\small\item\em Parse a human-\/readable log level into a numeric value. \end{DoxyCompactList}\item 
const char $\ast$ \textbf{ log\+\_\+level\+\_\+str} (unsigned int lvl)
\begin{DoxyCompactList}\small\item\em convert a numeric log level into human-\/readable string \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+parse\+\_\+category} (const char $\ast$category)
\begin{DoxyCompactList}\small\item\em parse a human-\/readable log category into numeric form \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+set\+\_\+category\+\_\+filter} (struct \textbf{ log\+\_\+target} $\ast$target, int category, int enable, int \textbf{ level})
\begin{DoxyCompactList}\small\item\em Set a category filter on a given log target. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create} (void)
\begin{DoxyCompactList}\small\item\em Create a new log target skeleton. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+target\+\_\+destroy} (struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em Unregister, close and delete a log target. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+stderr} (void)
\begin{DoxyCompactList}\small\item\em Create the STDERR log target. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+file} (const char $\ast$fname)
\begin{DoxyCompactList}\small\item\em Create a new file-\/based log target using non-\/blocking write\+\_\+queue. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+syslog} (const char $\ast$ident, int option, int facility)
\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+gsmtap} (const char $\ast$\textbf{ host}, uint16\+\_\+t port, const char $\ast$ident, bool ofd\+\_\+wq\+\_\+mode, bool add\+\_\+sink)
\begin{DoxyCompactList}\small\item\em Create a new logging target for GSMTAP logging. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+systemd} (bool raw)
\begin{DoxyCompactList}\small\item\em Create a new logging target for systemd journal logging. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+target\+\_\+systemd\+\_\+set\+\_\+raw} (struct \textbf{ log\+\_\+target} $\ast$target, bool raw)
\begin{DoxyCompactList}\small\item\em Change meta information handling of an existing logging target. \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+target\+\_\+file\+\_\+reopen} (struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em close and re-\/open a log file (for log file rotation) \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+stream} (struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em switch from non-\/blocking/write-\/queue to blocking + buffered stream output \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+wqueue} (struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em switch from blocking + buffered file output to non-\/blocking write-\/queue based output. \end{DoxyCompactList}\item 
int \textbf{ log\+\_\+targets\+\_\+reopen} (void)
\begin{DoxyCompactList}\small\item\em close and re-\/open all log files (for log file rotation) \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+add\+\_\+target} (struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em Register a new log target with the logging core. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+del\+\_\+target} (struct \textbf{ log\+\_\+target} $\ast$target)
\begin{DoxyCompactList}\small\item\em Unregister a log target from the logging core. \end{DoxyCompactList}\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+find} (enum \textbf{ log\+\_\+target\+\_\+type} \textbf{ type}, const char $\ast$fname)
\begin{DoxyCompactList}\small\item\em Find a registered log target. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+enable\+\_\+multithread} (void)
\begin{DoxyCompactList}\small\item\em Enable multithread support (mutex) in libosmocore logging system. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock\+\_\+impl} (void)
\begin{DoxyCompactList}\small\item\em Acquire the osmo\+\_\+log\+\_\+tgt\+\_\+mutex. \end{DoxyCompactList}\item 
void \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock\+\_\+impl} (void)
\begin{DoxyCompactList}\small\item\em Release the osmo\+\_\+log\+\_\+tgt\+\_\+mutex. \end{DoxyCompactList}\item 
\textbf{ osmo\+\_\+static\+\_\+assert} (\textbf{ \+\_\+\+LOG\+\_\+\+CTX\+\_\+\+COUNT}$<$=\textbf{ ARRAY\+\_\+\+SIZE}(((struct \textbf{ log\+\_\+context} $\ast$) NULL) -\/$>$ctx), enum\+\_\+logging\+\_\+ctx\+\_\+items\+\_\+fit\+\_\+in\+\_\+struct\+\_\+log\+\_\+context)
\item 
\textbf{ osmo\+\_\+static\+\_\+assert} (\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}$<$=\textbf{ ARRAY\+\_\+\+SIZE}(((struct \textbf{ log\+\_\+target} $\ast$) NULL) -\/$>$filter\+\_\+data), enum\+\_\+logging\+\_\+filters\+\_\+fit\+\_\+in\+\_\+log\+\_\+target\+\_\+filter\+\_\+data)
\item 
\textbf{ osmo\+\_\+static\+\_\+assert} (\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}$<$=8 $\ast$sizeof(((struct \textbf{ log\+\_\+target} $\ast$) NULL) -\/$>$filter\+\_\+map), enum\+\_\+logging\+\_\+filters\+\_\+fit\+\_\+in\+\_\+log\+\_\+target\+\_\+filter\+\_\+map)
\item 
\textbf{ LLIST\+\_\+\+HEAD} (\textbf{ osmo\+\_\+log\+\_\+target\+\_\+list})
\item 
static void \textbf{ log\+\_\+cache\+\_\+update\+\_\+all} (void)
\begin{DoxyCompactList}\small\item\em Updates cache for all targets for all categies, caller must hold osmo\+\_\+log\+\_\+tgt\+\_\+mutex. \end{DoxyCompactList}\item 
static bool \textbf{ log\+\_\+cache\+\_\+check} (int mapped\+\_\+subsys, int \textbf{ level})
\begin{DoxyCompactList}\small\item\em Queries log level cache. \end{DoxyCompactList}\item 
void \textbf{ assert\+\_\+loginfo} (const char $\ast$src)
\item 
static int \textbf{ subsys\+\_\+lib2index} (int \textbf{ subsys})
\item 
static const char $\ast$ \textbf{ color} (int \textbf{ subsys})
\item 
static const char $\ast$ \textbf{ level\+\_\+color} (int \textbf{ level})
\item 
static const char $\ast$ \textbf{ const\+\_\+basename} (const char $\ast$path)
\item 
static int \textbf{ \+\_\+output\+\_\+buf} (char $\ast$buf, int buf\+\_\+len, struct \textbf{ log\+\_\+target} $\ast$target, unsigned int \textbf{ subsys}, unsigned int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format, va\+\_\+list ap)
\begin{DoxyCompactList}\small\item\em main output formatting function for log lines. \end{DoxyCompactList}\item 
static void \textbf{ \+\_\+output} (struct \textbf{ log\+\_\+target} $\ast$target, unsigned int \textbf{ subsys}, unsigned int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format, va\+\_\+list ap)
\item 
static int \textbf{ map\+\_\+subsys} (int \textbf{ subsys})
\item 
static bool \textbf{ should\+\_\+log\+\_\+to\+\_\+target} (struct \textbf{ log\+\_\+target} $\ast$tar, int \textbf{ subsys}, int \textbf{ level})
\item 
static int \textbf{ \+\_\+file\+\_\+wq\+\_\+write\+\_\+cb} (struct \textbf{ osmo\+\_\+fd} $\ast$ofd, struct \textbf{ msgb} $\ast$\textbf{ msg})
\item 
static void \textbf{ \+\_\+file\+\_\+output\+\_\+stream} (struct \textbf{ log\+\_\+target} $\ast$target, unsigned int \textbf{ level}, const char $\ast$log)
\item 
static void \textbf{ \+\_\+file\+\_\+raw\+\_\+output} (struct \textbf{ log\+\_\+target} $\ast$target, int \textbf{ subsys}, unsigned int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format, va\+\_\+list ap)
\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+file\+\_\+stream} (const char $\ast$fname)
\begin{DoxyCompactList}\small\item\em Create a new file-\/based log target using buffered, blocking stream output. \end{DoxyCompactList}\item 
static void \textbf{ \+\_\+gsmtap\+\_\+raw\+\_\+output} (struct \textbf{ log\+\_\+target} $\ast$target, int \textbf{ subsys}, unsigned int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format, va\+\_\+list ap)
\item 
static int \textbf{ logp2syslog\+\_\+level} (unsigned int \textbf{ level})
\item 
static void \textbf{ \+\_\+systemd\+\_\+output} (struct \textbf{ log\+\_\+target} $\ast$target, unsigned int \textbf{ level}, const char $\ast$log)
\item 
static void \textbf{ \+\_\+systemd\+\_\+raw\+\_\+output} (struct \textbf{ log\+\_\+target} $\ast$target, int \textbf{ subsys}, unsigned int \textbf{ level}, const char $\ast$\textbf{ file}, int line, int cont, const char $\ast$format, va\+\_\+list ap)
\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
struct \textbf{ log\+\_\+info} $\ast$ \textbf{ osmo\+\_\+log\+\_\+info}
\item 
struct \textbf{ log\+\_\+info} $\ast$ \textbf{ osmo\+\_\+log\+\_\+info}
\item 
static struct \textbf{ log\+\_\+context} \textbf{ log\+\_\+context}
\item 
void $\ast$ \textbf{ tall\+\_\+log\+\_\+ctx} = NULL
\item 
static \+\_\+\+\_\+thread long int \textbf{ logging\+\_\+tid}
\item 
static volatile uint8\+\_\+t $\ast$ \textbf{ log\+\_\+level\+\_\+lookup\+\_\+cache}
\begin{DoxyCompactList}\small\item\em One global copy that contains the union of log levels for all targets for all categories, used for quick lock free checks of log targets. \end{DoxyCompactList}\item 
static pthread\+\_\+mutex\+\_\+t \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex}
\begin{DoxyCompactList}\small\item\em This mutex must be held while using osmo\+\_\+log\+\_\+target\+\_\+list or any of its log\+\_\+targets in a multithread program. \end{DoxyCompactList}\item 
static bool \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex\+\_\+on} = false
\item 
const struct \textbf{ value\+\_\+string} \textbf{ loglevel\+\_\+strs} [$\,$]
\item 
static const struct \textbf{ log\+\_\+info\+\_\+cat} \textbf{ internal\+\_\+cat} [\textbf{ OSMO\+\_\+\+NUM\+\_\+\+DLIB}]
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ level\+\_\+colors} [$\,$]
\item 
static \+\_\+\+\_\+thread uint32\+\_\+t \textbf{ logging\+\_\+gsmtap\+\_\+tid}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
libosmocore Logging sub-\/system 



\doxysubsection{Macro Definition Documentation}
\mbox{\label{group__logging_gad72dbcf6d0153db1b8d8a58001feed83}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DEBUG@{DEBUG}}
\index{DEBUG@{DEBUG}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DEBUG}
{\footnotesize\ttfamily \#define DEBUG}

\mbox{\label{group__logging_gab805322bc0052e2cb6b6a6557fd59e91}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DEBUGP@{DEBUGP}}
\index{DEBUGP@{DEBUGP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DEBUGP}
{\footnotesize\ttfamily \#define DEBUGP(\begin{DoxyParamCaption}\item[{}]{ss,  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})~\textbf{ LOGP}(ss, \textbf{ LOGL\+\_\+\+DEBUG}, fmt, \#\#args)}



Log a debug message through the Osmocom logging framework. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ss} & logging subsystem (e.\+g. \doxyref{DLGLOBAL}{p.}{group__logging_ga4aea31ac198b5eefe88ee0d64f4465e1}) \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em args} & variable argument list \\
\hline
\end{DoxyParams}
\mbox{\label{group__logging_ga8d8fd840762ec476ed49951dc96ec486}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DEBUGPC@{DEBUGPC}}
\index{DEBUGPC@{DEBUGPC}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DEBUGPC}
{\footnotesize\ttfamily \#define DEBUGPC(\begin{DoxyParamCaption}\item[{}]{ss,  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})~\textbf{ LOGPC}(ss, \textbf{ LOGL\+\_\+\+DEBUG}, fmt, \#\#args)}

\mbox{\label{group__logging_ga243e175dd08dbeedc1615f285fa8dcd5}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLBSSGP@{DLBSSGP}}
\index{DLBSSGP@{DLBSSGP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLBSSGP}
{\footnotesize\ttfamily \#define DLBSSGP~-\/21}



Osmocom BSSGP layer. 

\mbox{\label{group__logging_ga0f6410121e1d40e6b39a9defc3cda48a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLCSN1@{DLCSN1}}
\index{DLCSN1@{DLCSN1}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLCSN1}
{\footnotesize\ttfamily \#define DLCSN1~-\/26}



CSN.\+1 (Concrete Syntax Notation 1) codec. 

\mbox{\label{group__logging_ga3be909c171763843e95a8c4bc8a4c65d}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLCTRL@{DLCTRL}}
\index{DLCTRL@{DLCTRL}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLCTRL}
{\footnotesize\ttfamily \#define DLCTRL~-\/8}



Control Interface. 

\mbox{\label{group__logging_ga4aea31ac198b5eefe88ee0d64f4465e1}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLGLOBAL@{DLGLOBAL}}
\index{DLGLOBAL@{DLGLOBAL}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLGLOBAL}
{\footnotesize\ttfamily \#define DLGLOBAL~-\/1}



global logging 

\mbox{\label{group__logging_ga8fbfba066a0152bfbfbc8a35d6a67ae6}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLGSUP@{DLGSUP}}
\index{DLGSUP@{DLGSUP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLGSUP}
{\footnotesize\ttfamily \#define DLGSUP~-\/11}



Generic Subscriber Update Protocol. 

\mbox{\label{group__logging_ga367dece4d3de29a2ce0c66a67ec383cf}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLGTP@{DLGTP}}
\index{DLGTP@{DLGTP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLGTP}
{\footnotesize\ttfamily \#define DLGTP~-\/9}



GTP (GPRS Tunneling Protocol. 

\mbox{\label{group__logging_gab52be37317ff7f1d004ad5cbbfd89a8a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLINP@{DLINP}}
\index{DLINP@{DLINP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLINP}
{\footnotesize\ttfamily \#define DLINP~-\/3}



(A-\/bis) Input sub-\/system 

\mbox{\label{group__logging_gae2026d3ccf7e9ca34e3b2f9e9479ed36}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLIO@{DLIO}}
\index{DLIO@{DLIO}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLIO}
{\footnotesize\ttfamily \#define DLIO~-\/29}



Osmocom IO sub-\/system. 

\mbox{\label{group__logging_gac86177c4f636081406dc5f42cde3bf18}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLIUUP@{DLIUUP}}
\index{DLIUUP@{DLIUUP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLIUUP}
{\footnotesize\ttfamily \#define DLIUUP~-\/24}



Osmocom Iu\+UP layer. 

\mbox{\label{group__logging_ga8333005c126c0cb33615251a662aa537}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLJIBUF@{DLJIBUF}}
\index{DLJIBUF@{DLJIBUF}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLJIBUF}
{\footnotesize\ttfamily \#define DLJIBUF~-\/18}



Osmocom Jitter Buffer. 

\mbox{\label{group__logging_gac508d5acedd3198df1b0ddab0fdad4a9}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLLAPD@{DLLAPD}}
\index{DLLAPD@{DLLAPD}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLLAPD}
{\footnotesize\ttfamily \#define DLLAPD~-\/2}



LAPD implementation. 

\mbox{\label{group__logging_ga6d98f805933df6b05a309d470020e0f0}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLM2PA@{DLM2PA}}
\index{DLM2PA@{DLM2PA}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLM2PA}
{\footnotesize\ttfamily \#define DLM2\+PA~-\/27}



Osmocom M2\+PA (libosmo-\/sigtran) 

\mbox{\label{group__logging_ga0adb569cdb9b1f96980e9e3a81e4fb6d}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLM2UA@{DLM2UA}}
\index{DLM2UA@{DLM2UA}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLM2UA}
{\footnotesize\ttfamily \#define DLM2\+UA~-\/28}



Reserved for future Osmocom M2\+UA (libosmo-\/sigtran) 

\mbox{\label{group__logging_ga9911d8286e13f99ca8e92481fcab3d61}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLM3UA@{DLM3UA}}
\index{DLM3UA@{DLM3UA}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLM3UA}
{\footnotesize\ttfamily \#define DLM3\+UA~-\/16}



Osmocom M3\+UA. 

\mbox{\label{group__logging_gaa27eeefc2f66410acdc1ff368cac9fa7}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLMGCP@{DLMGCP}}
\index{DLMGCP@{DLMGCP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLMGCP}
{\footnotesize\ttfamily \#define DLMGCP~-\/17}



Osmocom MGCP. 

\mbox{\label{group__logging_ga01e56d7b252518f706567706c6a2c54a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLMI@{DLMI}}
\index{DLMI@{DLMI}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLMI}
{\footnotesize\ttfamily \#define DLMI~-\/5}



ISDN-\/layer below input sub-\/system. 

\mbox{\label{group__logging_ga6203cfc0a9d21c35e5a7cc3d217e8c35}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLMIB@{DLMIB}}
\index{DLMIB@{DLMIB}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLMIB}
{\footnotesize\ttfamily \#define DLMIB~-\/6}



ISDN layer B-\/channel. 

\mbox{\label{group__logging_ga4fdc5cfc92a902e01350aacbb8cf4f48}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLMUX@{DLMUX}}
\index{DLMUX@{DLMUX}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLMUX}
{\footnotesize\ttfamily \#define DLMUX~-\/4}



Osmocom Multiplex (Osmux) 

\mbox{\label{group__logging_ga6360f368240b0c26f7e6dd99b9e796cd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLNS@{DLNS}}
\index{DLNS@{DLNS}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLNS}
{\footnotesize\ttfamily \#define DLNS~-\/20}



Osmocom NS layer. 

\mbox{\label{group__logging_gafdd2f851a16a7fa99d157caac09d6678}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLNSDATA@{DLNSDATA}}
\index{DLNSDATA@{DLNSDATA}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLNSDATA}
{\footnotesize\ttfamily \#define DLNSDATA~-\/22}



Osmocom NS layer data pdus. 

\mbox{\label{group__logging_gac296e000fa136e0c02102d35f01e95e1}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLNSSIGNAL@{DLNSSIGNAL}}
\index{DLNSSIGNAL@{DLNSSIGNAL}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLNSSIGNAL}
{\footnotesize\ttfamily \#define DLNSSIGNAL~-\/23}



Osmocom NS layer signal pdus. 

\mbox{\label{group__logging_ga16cc6c43c63789dbd3840b3b00b04b90}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLOAP@{DLOAP}}
\index{DLOAP@{DLOAP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLOAP}
{\footnotesize\ttfamily \#define DLOAP~-\/12}



Osmocom Authentication Protocol. 

\mbox{\label{group__logging_ga26edc4492cf33f9aba13ccdd6a854013}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLPFCP@{DLPFCP}}
\index{DLPFCP@{DLPFCP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLPFCP}
{\footnotesize\ttfamily \#define DLPFCP~-\/25}



Osmocom Packet Forwarding Control Protocol. 

\mbox{\label{group__logging_gacfe520078597b9d7952bd81b97824733}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLRSPRO@{DLRSPRO}}
\index{DLRSPRO@{DLRSPRO}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLRSPRO}
{\footnotesize\ttfamily \#define DLRSPRO~-\/19}



Osmocom Remote SIM Protocol. 

\mbox{\label{group__logging_ga93f292ab464aa522d229d711a9dbf772}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLSCCP@{DLSCCP}}
\index{DLSCCP@{DLSCCP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLSCCP}
{\footnotesize\ttfamily \#define DLSCCP~-\/14}



Osmocom SCCP. 

\mbox{\label{group__logging_ga672be81f15ed0aec6f1ee432943c2f55}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLSMS@{DLSMS}}
\index{DLSMS@{DLSMS}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLSMS}
{\footnotesize\ttfamily \#define DLSMS~-\/7}



SMS sub-\/system. 

\mbox{\label{group__logging_ga6589b380650facce31dcf506403b286a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLSS7@{DLSS7}}
\index{DLSS7@{DLSS7}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLSS7}
{\footnotesize\ttfamily \#define DLSS7~-\/13}



Osmocom SS7. 

\mbox{\label{group__logging_gac44cdefa09f9f1edb9c324c41aae0dd1}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLSTATS@{DLSTATS}}
\index{DLSTATS@{DLSTATS}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLSTATS}
{\footnotesize\ttfamily \#define DLSTATS~-\/10}



Statistics. 

\mbox{\label{group__logging_gabd33cb9b8a0c705a64eb145132507369}} 
\index{Osmocom logging framework@{Osmocom logging framework}!DLSUA@{DLSUA}}
\index{DLSUA@{DLSUA}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{DLSUA}
{\footnotesize\ttfamily \#define DLSUA~-\/15}



Osmocom SUA. 

\mbox{\label{group__logging_ga2767cd96c5606f6f01b61306aa18dac3}} 
\index{Osmocom logging framework@{Osmocom logging framework}!GPRS\_CTX\_BVC@{GPRS\_CTX\_BVC}}
\index{GPRS\_CTX\_BVC@{GPRS\_CTX\_BVC}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{GPRS\_CTX\_BVC}
{\footnotesize\ttfamily \#define GPRS\+\_\+\+CTX\+\_\+\+BVC~\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+BVC}}



Compatibility with older libosmocore versions. 

\mbox{\label{group__logging_gaadf767e191da5f43f26eb8d08b5a6557}} 
\index{Osmocom logging framework@{Osmocom logging framework}!GPRS\_CTX\_NSVC@{GPRS\_CTX\_NSVC}}
\index{GPRS\_CTX\_NSVC@{GPRS\_CTX\_NSVC}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{GPRS\_CTX\_NSVC}
{\footnotesize\ttfamily \#define GPRS\+\_\+\+CTX\+\_\+\+NSVC~\textbf{ LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+NSVC}}



Compatibility with older libosmocore versions. 

\mbox{\label{group__logging_ga243618945b3967a6eb290d1454f6d1e7}} 
\index{Osmocom logging framework@{Osmocom logging framework}!GSMTAP\_LOG\_MAX\_SIZE@{GSMTAP\_LOG\_MAX\_SIZE}}
\index{GSMTAP\_LOG\_MAX\_SIZE@{GSMTAP\_LOG\_MAX\_SIZE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{GSMTAP\_LOG\_MAX\_SIZE}
{\footnotesize\ttfamily \#define GSMTAP\+\_\+\+LOG\+\_\+\+MAX\+\_\+\+SIZE~4096}

\mbox{\label{group__logging_ga1307d6b14e5c102d9da8abaeea1bfacf}} 
\index{Osmocom logging framework@{Osmocom logging framework}!INT2IDX@{INT2IDX}}
\index{INT2IDX@{INT2IDX}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{INT2IDX}
{\footnotesize\ttfamily \#define INT2\+IDX(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~(-\/1$\ast$(x)-\/1)}

\mbox{\label{group__logging_ga161ff4636148f95a9ed46c5abbd0a7bc}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FILTER\_ALL@{LOG\_FILTER\_ALL}}
\index{LOG\_FILTER\_ALL@{LOG\_FILTER\_ALL}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOG\_FILTER\_ALL}
{\footnotesize\ttfamily \#define LOG\+\_\+\+FILTER\+\_\+\+ALL~(1$<$$<$\textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL})}



Compatibility with older libosmocore versions. 

\mbox{\label{group__logging_gabaaa5069968fda58cf87533e5118e19b}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_MAX\_CTX@{LOG\_MAX\_CTX}}
\index{LOG\_MAX\_CTX@{LOG\_MAX\_CTX}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOG\_MAX\_CTX}
{\footnotesize\ttfamily \#define LOG\+\_\+\+MAX\+\_\+\+CTX~\textbf{ \+\_\+\+LOG\+\_\+\+CTX\+\_\+\+COUNT}}



Maximum number of logging contexts. 

\mbox{\label{group__logging_ga66d98e30d290f9a0d3d6569d8403ee9f}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_MAX\_FILTERS@{LOG\_MAX\_FILTERS}}
\index{LOG\_MAX\_FILTERS@{LOG\_MAX\_FILTERS}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOG\_MAX\_FILTERS}
{\footnotesize\ttfamily \#define LOG\+\_\+\+MAX\+\_\+\+FILTERS~\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}}



Maximum number of logging filters. 

\mbox{\label{group__logging_ga7686f40221c336a9435bef4373b53acd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_MTX\_DEBUG@{LOG\_MTX\_DEBUG}}
\index{LOG\_MTX\_DEBUG@{LOG\_MTX\_DEBUG}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOG\_MTX\_DEBUG}
{\footnotesize\ttfamily \#define LOG\+\_\+\+MTX\+\_\+\+DEBUG~0}

\mbox{\label{group__logging_gac6cbd7eddb65044f30ff543a421ae495}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_tgt\_mutex\_lock@{log\_tgt\_mutex\_lock}}
\index{log\_tgt\_mutex\_lock@{log\_tgt\_mutex\_lock}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_tgt\_mutex\_lock}
{\footnotesize\ttfamily \#define log\+\_\+tgt\+\_\+mutex\+\_\+lock(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~\textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock\+\_\+impl}()}

\mbox{\label{group__logging_ga4070dabf4652e43fd6929fb259a6fa92}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_tgt\_mutex\_unlock@{log\_tgt\_mutex\_unlock}}
\index{log\_tgt\_mutex\_unlock@{log\_tgt\_mutex\_unlock}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_tgt\_mutex\_unlock}
{\footnotesize\ttfamily \#define log\+\_\+tgt\+\_\+mutex\+\_\+unlock(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~\textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock\+\_\+impl}()}

\mbox{\label{group__logging_gaf04b3072636350a4b12b5e7ece065c72}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_WQUEUE\_LEN@{LOG\_WQUEUE\_LEN}}
\index{LOG\_WQUEUE\_LEN@{LOG\_WQUEUE\_LEN}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOG\_WQUEUE\_LEN}
{\footnotesize\ttfamily \#define LOG\+\_\+\+WQUEUE\+\_\+\+LEN~156}

\mbox{\label{group__logging_gabe173829fa5e5a0f0f1a6d897c332ff0}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGL\_DEBUG@{LOGL\_DEBUG}}
\index{LOGL\_DEBUG@{LOGL\_DEBUG}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGL\_DEBUG}
{\footnotesize\ttfamily \#define LOGL\+\_\+\+DEBUG~1}



different log levels 

debugging information \mbox{\label{group__logging_ga5751e2408c2e9aa0b93aef4aa6a24227}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGL\_ERROR@{LOGL\_ERROR}}
\index{LOGL\_ERROR@{LOGL\_ERROR}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGL\_ERROR}
{\footnotesize\ttfamily \#define LOGL\+\_\+\+ERROR~7}



error condition, requires user action 

\mbox{\label{group__logging_ga567dc7ed188fed7155178c6aaaf885b7}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGL\_FATAL@{LOGL\_FATAL}}
\index{LOGL\_FATAL@{LOGL\_FATAL}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGL\_FATAL}
{\footnotesize\ttfamily \#define LOGL\+\_\+\+FATAL~8}



fatal, program aborted 

\mbox{\label{group__logging_gaa379189a8b3f928c55c3f4a43e65f625}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGL\_INFO@{LOGL\_INFO}}
\index{LOGL\_INFO@{LOGL\_INFO}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGL\_INFO}
{\footnotesize\ttfamily \#define LOGL\+\_\+\+INFO~3}



general information 

\mbox{\label{group__logging_ga176a1eddf217572b01568c9ffbaa92fd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGL\_NOTICE@{LOGL\_NOTICE}}
\index{LOGL\_NOTICE@{LOGL\_NOTICE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGL\_NOTICE}
{\footnotesize\ttfamily \#define LOGL\+\_\+\+NOTICE~5}



abnormal/unexpected condition 

\mbox{\label{group__logging_ga7e3a9f703edc9b95a8548a656a6f686d}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGP@{LOGP}}
\index{LOGP@{LOGP}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGP}
{\footnotesize\ttfamily \#define LOGP(\begin{DoxyParamCaption}\item[{}]{ss,  }\item[{}]{\textbf{ level},  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})~ \textbf{ LOGPSRC}(ss, \textbf{ level}, NULL, 0, fmt, \#\# args)}



Log a new message through the Osmocom logging framework. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ss} & logging subsystem (e.\+g. \doxyref{DLGLOBAL}{p.}{group__logging_ga4aea31ac198b5eefe88ee0d64f4465e1}) \\
\hline
\mbox{\texttt{ in}}  & {\em level} & logging level (e.\+g. \doxyref{LOGL\+\_\+\+NOTICE}{p.}{group__logging_ga176a1eddf217572b01568c9ffbaa92fd}) \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em args} & variable argument list \\
\hline
\end{DoxyParams}
\mbox{\label{group__logging_ga480d46b69590f6adcb75297ccc00a59e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGPC@{LOGPC}}
\index{LOGPC@{LOGPC}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGPC}
{\footnotesize\ttfamily \#define LOGPC(\begin{DoxyParamCaption}\item[{}]{ss,  }\item[{}]{\textbf{ level},  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{                if (!osmo\_log\_info) \{ \(\backslash\)}
\DoxyCodeLine{                        logp\_stub(\_\_FILE\_\_, \_\_LINE\_\_, 1, fmt, \#\#args);  \(\backslash\)}
\DoxyCodeLine{                        break; \(\backslash\)}
\DoxyCodeLine{                \} \(\backslash\)}
\DoxyCodeLine{                if (log\_check\_level(ss, level)) \(\backslash\)}
\DoxyCodeLine{                        logp2(ss, level, \_\_FILE\_\_, \_\_LINE\_\_, 1, fmt, \#\#args); \(\backslash\)}
\DoxyCodeLine{        \} \textcolor{keywordflow}{while}(0)}

\end{DoxyCode}


Continue a log message through the Osmocom logging framework. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ss} & logging subsystem (e.\+g. \doxyref{DLGLOBAL}{p.}{group__logging_ga4aea31ac198b5eefe88ee0d64f4465e1}) \\
\hline
\mbox{\texttt{ in}}  & {\em level} & logging level (e.\+g. \doxyref{LOGL\+\_\+\+NOTICE}{p.}{group__logging_ga176a1eddf217572b01568c9ffbaa92fd}) \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em args} & variable argument list \\
\hline
\end{DoxyParams}
\mbox{\label{group__logging_gaa3186473e49541f29bf4fca6ecca6df3}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGPSRC@{LOGPSRC}}
\index{LOGPSRC@{LOGPSRC}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGPSRC}
{\footnotesize\ttfamily \#define LOGPSRC(\begin{DoxyParamCaption}\item[{}]{ss,  }\item[{}]{\textbf{ level},  }\item[{}]{caller\+\_\+file,  }\item[{}]{caller\+\_\+line,  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})~ \textbf{ LOGPSRCC}(ss, \textbf{ level}, caller\+\_\+file, caller\+\_\+line, 0, fmt, \#\#args)}



Log through the Osmocom logging framework with explicit source. 

If caller\+\_\+file is passed as NULL, {\bfseries{FILE}} and {\bfseries{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). 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ss} & logging subsystem (e.\+g. \doxyref{DLGLOBAL}{p.}{group__logging_ga4aea31ac198b5eefe88ee0d64f4465e1}) \\
\hline
\mbox{\texttt{ in}}  & {\em level} & logging level (e.\+g. \doxyref{LOGL\+\_\+\+NOTICE}{p.}{group__logging_ga176a1eddf217572b01568c9ffbaa92fd}) \\
\hline
\mbox{\texttt{ in}}  & {\em caller\+\_\+file} & caller\textquotesingle{}s source file string (e.\+g. {\bfseries{FILE}}) \\
\hline
\mbox{\texttt{ in}}  & {\em caller\+\_\+line} & caller\textquotesingle{}s source line nr (e.\+g. {\bfseries{LINE}}) \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em args} & variable argument list \\
\hline
\end{DoxyParams}
\mbox{\label{group__logging_ga211311153adb5599da85c35546511952}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LOGPSRCC@{LOGPSRCC}}
\index{LOGPSRCC@{LOGPSRCC}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LOGPSRCC}
{\footnotesize\ttfamily \#define LOGPSRCC(\begin{DoxyParamCaption}\item[{}]{ss,  }\item[{}]{\textbf{ level},  }\item[{}]{caller\+\_\+file,  }\item[{}]{caller\+\_\+line,  }\item[{}]{cont,  }\item[{}]{fmt,  }\item[{}]{args... }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{                if (!osmo\_log\_info) \{ \(\backslash\)}
\DoxyCodeLine{                        if (caller\_file) \(\backslash\)}
\DoxyCodeLine{                                logp\_stub(caller\_file, caller\_line, cont, fmt, \#\#args); \(\backslash\)}
\DoxyCodeLine{                        else \(\backslash\)}
\DoxyCodeLine{                                logp\_stub(\_\_FILE\_\_, \_\_LINE\_\_, cont, fmt, \#\#args); \(\backslash\)}
\DoxyCodeLine{                        break; \(\backslash\)}
\DoxyCodeLine{                \} \(\backslash\)}
\DoxyCodeLine{                if (log\_check\_level(ss, level)) \{\(\backslash\)}
\DoxyCodeLine{                        if (caller\_file) \(\backslash\)}
\DoxyCodeLine{                                logp2(ss, level, caller\_file, caller\_line, cont, fmt, \#\#args); \(\backslash\)}
\DoxyCodeLine{                        else \(\backslash\)}
\DoxyCodeLine{                                logp2(ss, level, \_\_FILE\_\_, \_\_LINE\_\_, cont, fmt, \#\#args); \(\backslash\)}
\DoxyCodeLine{                \}\(\backslash\)}
\DoxyCodeLine{        \} \textcolor{keywordflow}{while}(0)}

\end{DoxyCode}


Log through the Osmocom logging framework with explicit source. 

If caller\+\_\+file is passed as NULL, {\bfseries{FILE}} and {\bfseries{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). 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ss} & logging subsystem (e.\+g. \doxyref{DLGLOBAL}{p.}{group__logging_ga4aea31ac198b5eefe88ee0d64f4465e1}) \\
\hline
\mbox{\texttt{ in}}  & {\em level} & logging level (e.\+g. \doxyref{LOGL\+\_\+\+NOTICE}{p.}{group__logging_ga176a1eddf217572b01568c9ffbaa92fd}) \\
\hline
\mbox{\texttt{ in}}  & {\em caller\+\_\+file} & caller\textquotesingle{}s source file string (e.\+g. {\bfseries{FILE}}) \\
\hline
\mbox{\texttt{ in}}  & {\em caller\+\_\+line} & caller\textquotesingle{}s source line nr (e.\+g. {\bfseries{LINE}}) \\
\hline
\mbox{\texttt{ in}}  & {\em cont} & continuation (1) or new line (0) \\
\hline
\mbox{\texttt{ in}}  & {\em fmt} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em args} & variable argument list \\
\hline
\end{DoxyParams}
\mbox{\label{group__logging_gab6bc945ce840e4f0a16ec0fb12acc1a0}} 
\index{Osmocom logging framework@{Osmocom logging framework}!MAX\_LOG\_SIZE@{MAX\_LOG\_SIZE}}
\index{MAX\_LOG\_SIZE@{MAX\_LOG\_SIZE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{MAX\_LOG\_SIZE}
{\footnotesize\ttfamily \#define MAX\+\_\+\+LOG\+\_\+\+SIZE~4096}

\mbox{\label{group__logging_gab1d4482277ab53e471965a61d033c59a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_BLUE@{OSMO\_LOGCOLOR\_BLUE}}
\index{OSMO\_LOGCOLOR\_BLUE@{OSMO\_LOGCOLOR\_BLUE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_BLUE}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+BLUE~\char`\"{}\textbackslash{}033[1;34m\char`\"{}}

\mbox{\label{group__logging_ga4e6cf007df2991f502ac861dec2bad3c}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_BRIGHTWHITE@{OSMO\_LOGCOLOR\_BRIGHTWHITE}}
\index{OSMO\_LOGCOLOR\_BRIGHTWHITE@{OSMO\_LOGCOLOR\_BRIGHTWHITE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_BRIGHTWHITE}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+BRIGHTWHITE~\char`\"{}\textbackslash{}033[1;37m\char`\"{}}

\mbox{\label{group__logging_ga39b88ca09448a54a65bf36c8d945e5c4}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_CYAN@{OSMO\_LOGCOLOR\_CYAN}}
\index{OSMO\_LOGCOLOR\_CYAN@{OSMO\_LOGCOLOR\_CYAN}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_CYAN}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+CYAN~\char`\"{}\textbackslash{}033[1;36m\char`\"{}}

\mbox{\label{group__logging_ga9eb6b26833e7283a7b4c95c00f5c75e2}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKBLUE@{OSMO\_LOGCOLOR\_DARKBLUE}}
\index{OSMO\_LOGCOLOR\_DARKBLUE@{OSMO\_LOGCOLOR\_DARKBLUE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKBLUE}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKBLUE~\char`\"{}\textbackslash{}033[34m\char`\"{}}

\mbox{\label{group__logging_gad38cd2f97c66366a1ea07627682af607}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKCYAN@{OSMO\_LOGCOLOR\_DARKCYAN}}
\index{OSMO\_LOGCOLOR\_DARKCYAN@{OSMO\_LOGCOLOR\_DARKCYAN}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKCYAN}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKCYAN~\char`\"{}\textbackslash{}033[36m\char`\"{}}

\mbox{\label{group__logging_gaa7c0a44147d0112e608a34a67ec06279}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKGREEN@{OSMO\_LOGCOLOR\_DARKGREEN}}
\index{OSMO\_LOGCOLOR\_DARKGREEN@{OSMO\_LOGCOLOR\_DARKGREEN}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKGREEN}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKGREEN~\char`\"{}\textbackslash{}033[32m\char`\"{}}

\mbox{\label{group__logging_ga3726ef8ce24622ff62985f7de3841acd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKGREY@{OSMO\_LOGCOLOR\_DARKGREY}}
\index{OSMO\_LOGCOLOR\_DARKGREY@{OSMO\_LOGCOLOR\_DARKGREY}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKGREY}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKGREY~\char`\"{}\textbackslash{}033[1;30m\char`\"{}}

\mbox{\label{group__logging_ga176ea715c3e9759f46812c6556bae5f7}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKPURPLE@{OSMO\_LOGCOLOR\_DARKPURPLE}}
\index{OSMO\_LOGCOLOR\_DARKPURPLE@{OSMO\_LOGCOLOR\_DARKPURPLE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKPURPLE}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKPURPLE~\char`\"{}\textbackslash{}033[35m\char`\"{}}

\mbox{\label{group__logging_ga22dbdc0364aba55e3d4fafedb0a4e68a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKRED@{OSMO\_LOGCOLOR\_DARKRED}}
\index{OSMO\_LOGCOLOR\_DARKRED@{OSMO\_LOGCOLOR\_DARKRED}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKRED}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKRED~\char`\"{}\textbackslash{}033[31m\char`\"{}}

\mbox{\label{group__logging_ga72ebb25dc8d4f668c3ac1c6af6c8b7ab}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_DARKYELLOW@{OSMO\_LOGCOLOR\_DARKYELLOW}}
\index{OSMO\_LOGCOLOR\_DARKYELLOW@{OSMO\_LOGCOLOR\_DARKYELLOW}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_DARKYELLOW}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+DARKYELLOW~\char`\"{}\textbackslash{}033[33m\char`\"{}}

\mbox{\label{group__logging_ga1c6a567286ae79e3dc219957760b635b}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_END@{OSMO\_LOGCOLOR\_END}}
\index{OSMO\_LOGCOLOR\_END@{OSMO\_LOGCOLOR\_END}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_END}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+END~\char`\"{}\textbackslash{}033[0;m\char`\"{}}

\mbox{\label{group__logging_gaf6aeeabed9a289ec900ab054ca42a880}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_GREEN@{OSMO\_LOGCOLOR\_GREEN}}
\index{OSMO\_LOGCOLOR\_GREEN@{OSMO\_LOGCOLOR\_GREEN}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_GREEN}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+GREEN~\char`\"{}\textbackslash{}033[1;32m\char`\"{}}

\mbox{\label{group__logging_ga3187fa245f134300fb813201fb3adf4b}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_GREY@{OSMO\_LOGCOLOR\_GREY}}
\index{OSMO\_LOGCOLOR\_GREY@{OSMO\_LOGCOLOR\_GREY}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_GREY}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+GREY~\char`\"{}\textbackslash{}033[37m\char`\"{}}

\mbox{\label{group__logging_gaeabbb50a435e0776a956c44effa97c80}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_NORMAL@{OSMO\_LOGCOLOR\_NORMAL}}
\index{OSMO\_LOGCOLOR\_NORMAL@{OSMO\_LOGCOLOR\_NORMAL}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_NORMAL}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+NORMAL~NULL}

\mbox{\label{group__logging_ga6c51b4bf79120aad0b42105684655733}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_PURPLE@{OSMO\_LOGCOLOR\_PURPLE}}
\index{OSMO\_LOGCOLOR\_PURPLE@{OSMO\_LOGCOLOR\_PURPLE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_PURPLE}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+PURPLE~\char`\"{}\textbackslash{}033[1;35m\char`\"{}}

\mbox{\label{group__logging_gada088eba1c7ec85201b0d7827e231818}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_RED@{OSMO\_LOGCOLOR\_RED}}
\index{OSMO\_LOGCOLOR\_RED@{OSMO\_LOGCOLOR\_RED}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_RED}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+RED~\char`\"{}\textbackslash{}033[1;31m\char`\"{}}

\mbox{\label{group__logging_gafca3dd5f88c08e8541b520d8ce73a124}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_LOGCOLOR\_YELLOW@{OSMO\_LOGCOLOR\_YELLOW}}
\index{OSMO\_LOGCOLOR\_YELLOW@{OSMO\_LOGCOLOR\_YELLOW}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_LOGCOLOR\_YELLOW}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+LOGCOLOR\+\_\+\+YELLOW~\char`\"{}\textbackslash{}033[1;33m\char`\"{}}

\mbox{\label{group__logging_gaecab053fad9c276e06d38883e054a35d}} 
\index{Osmocom logging framework@{Osmocom logging framework}!OSMO\_NUM\_DLIB@{OSMO\_NUM\_DLIB}}
\index{OSMO\_NUM\_DLIB@{OSMO\_NUM\_DLIB}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{OSMO\_NUM\_DLIB}
{\footnotesize\ttfamily \#define OSMO\+\_\+\+NUM\+\_\+\+DLIB~29}



Number of logging sub-\/systems in libraries. 

\mbox{\label{group__logging_gae2434162e872ec8189ca11e53257fad6}} 
\index{Osmocom logging framework@{Osmocom logging framework}!SD\_JOURNAL\_SUPPRESS\_LOCATION@{SD\_JOURNAL\_SUPPRESS\_LOCATION}}
\index{SD\_JOURNAL\_SUPPRESS\_LOCATION@{SD\_JOURNAL\_SUPPRESS\_LOCATION}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{SD\_JOURNAL\_SUPPRESS\_LOCATION}
{\footnotesize\ttfamily \#define SD\+\_\+\+JOURNAL\+\_\+\+SUPPRESS\+\_\+\+LOCATION}

\mbox{\label{group__logging_ga9b44d241a9984069d3c9de002b6c149c}} 
\index{Osmocom logging framework@{Osmocom logging framework}!TRACE@{TRACE}}
\index{TRACE@{TRACE}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{TRACE}
{\footnotesize\ttfamily \#define TRACE(\begin{DoxyParamCaption}\item[{}]{probe }\end{DoxyParamCaption})}

\mbox{\label{group__logging_gaa753ae2ccad22fb27615272c6b2b04e0}} 
\index{Osmocom logging framework@{Osmocom logging framework}!TRACE\_ENABLED@{TRACE\_ENABLED}}
\index{TRACE\_ENABLED@{TRACE\_ENABLED}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{TRACE\_ENABLED}
{\footnotesize\ttfamily \#define TRACE\+\_\+\+ENABLED(\begin{DoxyParamCaption}\item[{}]{probe }\end{DoxyParamCaption})~(0)}



\doxysubsection{Typedef Documentation}
\mbox{\label{group__logging_ga9aa9411ab93da3b2638bdb5a7689f43f}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_filter@{log\_filter}}
\index{log\_filter@{log\_filter}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_filter}
{\footnotesize\ttfamily typedef int log\+\_\+filter(const struct \textbf{ log\+\_\+context} $\ast$ctx, struct \textbf{ log\+\_\+target} $\ast$target)}



Log filter function. 

\mbox{\label{group__logging_ga50a6f260b056b50b322cf32215ca5a6e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_print\_filters@{log\_print\_filters}}
\index{log\_print\_filters@{log\_print\_filters}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_print\_filters}
{\footnotesize\ttfamily typedef void log\+\_\+print\+\_\+filters(struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ log\+\_\+info} $\ast$info, const struct \textbf{ log\+\_\+target} $\ast$tgt)}

\mbox{\label{group__logging_ga6684cf1a2e24cc41a5d2ad526d43e0e3}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_save\_filters@{log\_save\_filters}}
\index{log\_save\_filters@{log\_save\_filters}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_save\_filters}
{\footnotesize\ttfamily typedef void log\+\_\+save\+\_\+filters(struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ log\+\_\+info} $\ast$info, const struct \textbf{ log\+\_\+target} $\ast$tgt)}



\doxysubsection{Enumeration Type Documentation}
\mbox{\label{group__logging_ga0b31990f947ded850132fde88eac7269}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_ctx\_index@{log\_ctx\_index}}
\index{log\_ctx\_index@{log\_ctx\_index}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_ctx\_index}
{\footnotesize\ttfamily enum \textbf{ log\+\_\+ctx\+\_\+index}}



Indexes to indicate the object currently acted upon. 

Array indexes for the global {\itshape \doxyref{log\+\_\+context}{p.}{structlog__context}} array. \begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_CTX\_GB\_NSVC@{LOG\_CTX\_GB\_NSVC}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_CTX\_GB\_NSVC@{LOG\_CTX\_GB\_NSVC}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269ab2b2f65564b8cb93e38408efb8e552aa}} 
LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+NSVC&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_CTX\_GB\_BVC@{LOG\_CTX\_GB\_BVC}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_CTX\_GB\_BVC@{LOG\_CTX\_GB\_BVC}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269a499f33e1bba1584a3a79a57331219fe0}} 
LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+BVC&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_CTX\_BSC\_SUBSCR@{LOG\_CTX\_BSC\_SUBSCR}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_CTX\_BSC\_SUBSCR@{LOG\_CTX\_BSC\_SUBSCR}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269a431e5ed8bf229489e36d9a97ed4313a4}} 
LOG\+\_\+\+CTX\+\_\+\+BSC\+\_\+\+SUBSCR&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_CTX\_VLR\_SUBSCR@{LOG\_CTX\_VLR\_SUBSCR}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_CTX\_VLR\_SUBSCR@{LOG\_CTX\_VLR\_SUBSCR}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269afee9d2f4cf2c54e572bb727629d47888}} 
LOG\+\_\+\+CTX\+\_\+\+VLR\+\_\+\+SUBSCR&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_CTX\_L1\_SAPI@{LOG\_CTX\_L1\_SAPI}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_CTX\_L1\_SAPI@{LOG\_CTX\_L1\_SAPI}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269a953a8aa7359e6989f7a6f44df15a78b2}} 
LOG\+\_\+\+CTX\+\_\+\+L1\+\_\+\+SAPI&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_CTX\_GB\_NSE@{LOG\_CTX\_GB\_NSE}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_CTX\_GB\_NSE@{LOG\_CTX\_GB\_NSE}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269a28bca66c7dc4e1d74fcd6a05fa2af41a}} 
LOG\+\_\+\+CTX\+\_\+\+GB\+\_\+\+NSE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{\_LOG\_CTX\_COUNT@{\_LOG\_CTX\_COUNT}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!\_LOG\_CTX\_COUNT@{\_LOG\_CTX\_COUNT}}}\mbox{\label{group__logging_gga0b31990f947ded850132fde88eac7269a5b769eab13b25bf7b21a07da3cb4091e}} 
\+\_\+\+LOG\+\_\+\+CTX\+\_\+\+COUNT&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{group__logging_ga6e0a93c1ec5d89bbeb811a03a8b03778}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_filename\_pos@{log\_filename\_pos}}
\index{log\_filename\_pos@{log\_filename\_pos}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_filename\_pos}
{\footnotesize\ttfamily enum \textbf{ log\+\_\+filename\+\_\+pos}}



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

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FILENAME\_POS\_HEADER\_END@{LOG\_FILENAME\_POS\_HEADER\_END}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FILENAME\_POS\_HEADER\_END@{LOG\_FILENAME\_POS\_HEADER\_END}}}\mbox{\label{group__logging_gga6e0a93c1ec5d89bbeb811a03a8b03778a61d25ea988748fb625f420d1b2ab393a}} 
LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+HEADER\+\_\+\+END&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FILENAME\_POS\_LINE\_END@{LOG\_FILENAME\_POS\_LINE\_END}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FILENAME\_POS\_LINE\_END@{LOG\_FILENAME\_POS\_LINE\_END}}}\mbox{\label{group__logging_gga6e0a93c1ec5d89bbeb811a03a8b03778a55a9648e7b38f83759ea56e54c8d7102}} 
LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+LINE\+\_\+\+END&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{group__logging_gab022087cde64deb9a1bae1624d774dc9}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_filename\_type@{log\_filename\_type}}
\index{log\_filename\_type@{log\_filename\_type}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_filename\_type}
{\footnotesize\ttfamily enum \textbf{ log\+\_\+filename\+\_\+type}}



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

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FILENAME\_NONE@{LOG\_FILENAME\_NONE}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FILENAME\_NONE@{LOG\_FILENAME\_NONE}}}\mbox{\label{group__logging_ggab022087cde64deb9a1bae1624d774dc9a845f226b47312a372c394187f5de0a56}} 
LOG\+\_\+\+FILENAME\+\_\+\+NONE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FILENAME\_PATH@{LOG\_FILENAME\_PATH}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FILENAME\_PATH@{LOG\_FILENAME\_PATH}}}\mbox{\label{group__logging_ggab022087cde64deb9a1bae1624d774dc9a90a7382992c3cd103edc53a49e9cc365}} 
LOG\+\_\+\+FILENAME\+\_\+\+PATH&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FILENAME\_BASENAME@{LOG\_FILENAME\_BASENAME}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FILENAME\_BASENAME@{LOG\_FILENAME\_BASENAME}}}\mbox{\label{group__logging_ggab022087cde64deb9a1bae1624d774dc9a48db77965785dadcff72df967e3b98f0}} 
LOG\+\_\+\+FILENAME\+\_\+\+BASENAME&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{group__logging_ga06c744d8d9104f275d8b8568c09fd144}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_filter\_index@{log\_filter\_index}}
\index{log\_filter\_index@{log\_filter\_index}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_filter\_index}
{\footnotesize\ttfamily enum \textbf{ 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. \begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_ALL@{LOG\_FLT\_ALL}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_ALL@{LOG\_FLT\_ALL}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144ab84e1400c3d6394a42c59ebb5804d35f}} 
LOG\+\_\+\+FLT\+\_\+\+ALL&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_GB\_NSVC@{LOG\_FLT\_GB\_NSVC}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_GB\_NSVC@{LOG\_FLT\_GB\_NSVC}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144af1c6cd3bc83977353ed364f5f74ac079}} 
LOG\+\_\+\+FLT\+\_\+\+GB\+\_\+\+NSVC&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_GB\_BVC@{LOG\_FLT\_GB\_BVC}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_GB\_BVC@{LOG\_FLT\_GB\_BVC}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144afd12e35cc7bbb41874f8633d9ecca226}} 
LOG\+\_\+\+FLT\+\_\+\+GB\+\_\+\+BVC&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_BSC\_SUBSCR@{LOG\_FLT\_BSC\_SUBSCR}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_BSC\_SUBSCR@{LOG\_FLT\_BSC\_SUBSCR}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144ad499c4019c93f32b64d4df742378db08}} 
LOG\+\_\+\+FLT\+\_\+\+BSC\+\_\+\+SUBSCR&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_VLR\_SUBSCR@{LOG\_FLT\_VLR\_SUBSCR}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_VLR\_SUBSCR@{LOG\_FLT\_VLR\_SUBSCR}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144a4e168783da86b54fd539e99a6c506582}} 
LOG\+\_\+\+FLT\+\_\+\+VLR\+\_\+\+SUBSCR&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_L1\_SAPI@{LOG\_FLT\_L1\_SAPI}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_L1\_SAPI@{LOG\_FLT\_L1\_SAPI}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144af2ce4663bf5459d7b8e5882b14ffc366}} 
LOG\+\_\+\+FLT\+\_\+\+L1\+\_\+\+SAPI&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_FLT\_GB\_NSE@{LOG\_FLT\_GB\_NSE}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_FLT\_GB\_NSE@{LOG\_FLT\_GB\_NSE}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144ab863c5978ee5ccb9f98a8fdeac515d16}} 
LOG\+\_\+\+FLT\+\_\+\+GB\+\_\+\+NSE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{\_LOG\_FLT\_COUNT@{\_LOG\_FLT\_COUNT}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!\_LOG\_FLT\_COUNT@{\_LOG\_FLT\_COUNT}}}\mbox{\label{group__logging_gga06c744d8d9104f275d8b8568c09fd144a882ba6ec04ed8ab3b8c2298812175e3e}} 
\+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT&\\
\hline

\end{DoxyEnumFields}
\mbox{\label{group__logging_ga1dc8e73ef848a7dda9388a78342c72af}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_type@{log\_target\_type}}
\index{log\_target\_type@{log\_target\_type}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_type}
{\footnotesize\ttfamily enum \textbf{ log\+\_\+target\+\_\+type}}



Type of logging target. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_VTY@{LOG\_TGT\_TYPE\_VTY}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_VTY@{LOG\_TGT\_TYPE\_VTY}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afa5e7df050860657ceae54c6d8d53daaa6}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+VTY&VTY logging. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_SYSLOG@{LOG\_TGT\_TYPE\_SYSLOG}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_SYSLOG@{LOG\_TGT\_TYPE\_SYSLOG}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afa7e61ffe8cb20b4306d778f5fddca524d}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSLOG&syslog based logging \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_FILE@{LOG\_TGT\_TYPE\_FILE}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_FILE@{LOG\_TGT\_TYPE\_FILE}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afa79c80cbde04026a6d3ce81d52ce952f9}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE&text file logging \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_STDERR@{LOG\_TGT\_TYPE\_STDERR}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_STDERR@{LOG\_TGT\_TYPE\_STDERR}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afaeb9f1a2e04ee58df0f8d382ecb9303db}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR&stderr logging \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_STRRB@{LOG\_TGT\_TYPE\_STRRB}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_STRRB@{LOG\_TGT\_TYPE\_STRRB}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afa9fd43c1d92e6b696a6812e843e3c5ac7}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STRRB&osmo\+\_\+strrb-\/backed logging \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_GSMTAP@{LOG\_TGT\_TYPE\_GSMTAP}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_GSMTAP@{LOG\_TGT\_TYPE\_GSMTAP}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afaf8eb416af6d948db3a2e82aaad21b051}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP&GSMTAP network logging. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{LOG\_TGT\_TYPE\_SYSTEMD@{LOG\_TGT\_TYPE\_SYSTEMD}!Osmocom logging framework@{Osmocom logging framework}}\index{Osmocom logging framework@{Osmocom logging framework}!LOG\_TGT\_TYPE\_SYSTEMD@{LOG\_TGT\_TYPE\_SYSTEMD}}}\mbox{\label{group__logging_gga1dc8e73ef848a7dda9388a78342c72afafd02bcfbb8d4243a111bde615e812dfe}} 
LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSTEMD&systemd journal logging \\
\hline

\end{DoxyEnumFields}


\doxysubsection{Function Documentation}
\mbox{\label{group__logging_gac58b88e7430d4320daeb988f582a0492}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_file\_output\_stream@{\_file\_output\_stream}}
\index{\_file\_output\_stream@{\_file\_output\_stream}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_file\_output\_stream()}
{\footnotesize\ttfamily static void \+\_\+file\+\_\+output\+\_\+stream (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{log }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ log\+\_\+target\+::out}, and \textbf{ log\+\_\+target\+::tgt\+\_\+file}.



Referenced by \textbf{ log\+\_\+target\+\_\+create\+\_\+file\+\_\+stream()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+stderr()}, and \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+stream()}.

\mbox{\label{group__logging_gae88920d8c69c10587f87a8890a7d50ea}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_file\_raw\_output@{\_file\_raw\_output}}
\index{\_file\_raw\_output@{\_file\_raw\_output}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_file\_raw\_output()}
{\footnotesize\ttfamily static void \+\_\+file\+\_\+raw\+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{subsys,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{va\+\_\+list}]{ap }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+file\+\_\+wq\+\_\+write\+\_\+cb()}, \textbf{ \+\_\+output\+\_\+buf()}, \textbf{ osmo\+\_\+wqueue\+::bfd}, \textbf{ osmo\+\_\+wqueue\+::current\+\_\+length}, \textbf{ file()}, \textbf{ level}, \textbf{ MAX\+\_\+\+LOG\+\_\+\+SIZE}, \textbf{ msg}, \textbf{ msgb\+\_\+alloc\+\_\+c()}, \textbf{ msgb\+\_\+data()}, \textbf{ msgb\+\_\+free()}, \textbf{ msgb\+\_\+put()}, \textbf{ msgb\+\_\+tailroom()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+wqueue\+\_\+enqueue\+\_\+quiet()}, \textbf{ subsys}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, and \textbf{ log\+\_\+target\+::wqueue}.



Referenced by \textbf{ log\+\_\+target\+\_\+create\+\_\+file()}, and \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+wqueue()}.

\mbox{\label{group__logging_ga0b4fb5d7be9e8f40cddabbb2ad684e7a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_file\_wq\_write\_cb@{\_file\_wq\_write\_cb}}
\index{\_file\_wq\_write\_cb@{\_file\_wq\_write\_cb}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_file\_wq\_write\_cb()}
{\footnotesize\ttfamily static int \+\_\+file\+\_\+wq\+\_\+write\+\_\+cb (\begin{DoxyParamCaption}\item[{struct \textbf{ osmo\+\_\+fd} $\ast$}]{ofd,  }\item[{struct \textbf{ msgb} $\ast$}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ msg}, \textbf{ msgb\+\_\+data()}, \textbf{ msgb\+\_\+length()}, and \textbf{ msgb\+\_\+pull()}.



Referenced by \textbf{ \+\_\+file\+\_\+raw\+\_\+output()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+file()}, and \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+wqueue()}.

\mbox{\label{group__logging_gadcb5d64707df94b5f4aa8671936a335e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_gsmtap\_raw\_output@{\_gsmtap\_raw\_output}}
\index{\_gsmtap\_raw\_output@{\_gsmtap\_raw\_output}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_gsmtap\_raw\_output()}
{\footnotesize\ttfamily static void \+\_\+gsmtap\+\_\+raw\+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{subsys,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{va\+\_\+list}]{ap }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ file()}, \textbf{ log\+\_\+target\+::gsmtap\+\_\+inst}, \textbf{ GSMTAP\+\_\+\+LOG\+\_\+\+MAX\+\_\+\+SIZE}, \textbf{ gsmtap\+\_\+sendmsg()}, \textbf{ GSMTAP\+\_\+\+TYPE\+\_\+\+OSMOCORE\+\_\+\+LOG}, \textbf{ GSMTAP\+\_\+\+VERSION}, \textbf{ gsmtap\+\_\+hdr\+::hdr\+\_\+len}, \textbf{ log\+\_\+target\+::ident}, \textbf{ level}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::level}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::line\+\_\+nr}, \textbf{ log\+\_\+category\+\_\+name()}, \textbf{ logging\+\_\+gsmtap\+\_\+tid}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ msg}, \textbf{ msgb\+\_\+alloc()}, \textbf{ msgb\+\_\+free()}, \textbf{ msgb\+\_\+put()}, \textbf{ msgb\+\_\+tailroom()}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::name}, \textbf{ osmo\+\_\+gettid()}, \textbf{ osmo\+\_\+gettimeofday()}, \textbf{ osmo\+\_\+htonl}, \textbf{ osmo\+\_\+store32be()}, \textbf{ OSMO\+\_\+\+STRLCPY\+\_\+\+ARRAY}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::pid}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::proc\+\_\+name}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::sec}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::src\+\_\+file}, \textbf{ subsys}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::subsys}, \textbf{ log\+\_\+target\+::tgt\+\_\+gsmtap}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::ts}, \textbf{ gsmtap\+\_\+hdr\+::type}, \textbf{ gsmtap\+\_\+osmocore\+\_\+log\+\_\+hdr\+::usec}, and \textbf{ gsmtap\+\_\+hdr\+::version}.



Referenced by \textbf{ log\+\_\+target\+\_\+create\+\_\+gsmtap()}.

\mbox{\label{group__logging_gac3b1f3ec5edbed60f4ac831e93186326}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_output@{\_output}}
\index{\_output@{\_output}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_output()}
{\footnotesize\ttfamily static void \+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{unsigned int}]{subsys,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{va\+\_\+list}]{ap }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ \+\_\+output\+\_\+buf()}, \textbf{ file()}, \textbf{ level}, \textbf{ MAX\+\_\+\+LOG\+\_\+\+SIZE}, \textbf{ log\+\_\+target\+::output}, and \textbf{ subsys}.



Referenced by \textbf{ osmo\+\_\+vlogp()}.

\mbox{\label{group__logging_ga9a737368c34f00c508d98b68c8af1ddd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_output\_buf@{\_output\_buf}}
\index{\_output\_buf@{\_output\_buf}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_output\_buf()}
{\footnotesize\ttfamily static int \+\_\+output\+\_\+buf (\begin{DoxyParamCaption}\item[{char $\ast$}]{buf,  }\item[{int}]{buf\+\_\+len,  }\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{unsigned int}]{subsys,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{va\+\_\+list}]{ap }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



main output formatting function for log lines. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em buf} & caller-\/allocated output buffer for the generated string \\
\hline
\mbox{\texttt{ in}}  & {\em buf\+\_\+len} & number of bytes available in buf \\
\hline
\mbox{\texttt{ in}}  & {\em target} & log target for which the string is to be formatted \\
\hline
\mbox{\texttt{ in}}  & {\em subsys} & Log sub-\/system number \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Log level \\
\hline
\mbox{\texttt{ in}}  & {\em file} & name of source code file generating the log \\
\hline
\mbox{\texttt{ in}}  & {\em line} & line source code line number within \textquotesingle{}file\textquotesingle{} generating the log \\
\hline
\mbox{\texttt{ in}}  & {\em cont} & is this a continuation (true) or not (false) \\
\hline
\mbox{\texttt{ in}}  & {\em format} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em ap} & variable argument list for format \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
number of bytes written to out 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+strbuf\+::buf}, \textbf{ color()}, \textbf{ const\+\_\+basename()}, \textbf{ file()}, \textbf{ level}, \textbf{ level\+\_\+color()}, \textbf{ log\+\_\+category\+\_\+name()}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+BASENAME}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+NONE}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+PATH}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+HEADER\+\_\+\+END}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+LINE\+\_\+\+END}, \textbf{ log\+\_\+level\+\_\+str()}, \textbf{ logging\+\_\+tid}, \textbf{ osmo\+\_\+gettid()}, \textbf{ osmo\+\_\+gettimeofday()}, \textbf{ OSMO\+\_\+\+LOGCOLOR\+\_\+\+END}, \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+ADDED\+\_\+\+TAIL}, \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+APPEND}, \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+CHAR\+\_\+\+COUNT}, \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+DROP\+\_\+\+TAIL}, \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+PRINTF}, \textbf{ OSMO\+\_\+\+STRBUF\+\_\+\+REMAIN}, \textbf{ osmo\+\_\+strbuf\+::pos}, \textbf{ log\+\_\+target\+::print\+\_\+category}, \textbf{ log\+\_\+target\+::print\+\_\+category\+\_\+hex}, \textbf{ log\+\_\+target\+::print\+\_\+ext\+\_\+timestamp}, \textbf{ log\+\_\+target\+::print\+\_\+filename2}, \textbf{ log\+\_\+target\+::print\+\_\+filename\+\_\+pos}, \textbf{ log\+\_\+target\+::print\+\_\+level}, \textbf{ log\+\_\+target\+::print\+\_\+tid}, \textbf{ log\+\_\+target\+::print\+\_\+timestamp}, \textbf{ subsys}, \textbf{ time}, and \textbf{ log\+\_\+target\+::use\+\_\+color}.



Referenced by \textbf{ \+\_\+file\+\_\+raw\+\_\+output()}, and \textbf{ \+\_\+output()}.

\mbox{\label{group__logging_ga27ea724905c07af4eda1dac1ef43824a}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_systemd\_output@{\_systemd\_output}}
\index{\_systemd\_output@{\_systemd\_output}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_systemd\_output()}
{\footnotesize\ttfamily static void \+\_\+systemd\+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{log }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ level}, and \textbf{ logp2syslog\+\_\+level()}.



Referenced by \textbf{ log\+\_\+target\+\_\+systemd\+\_\+set\+\_\+raw()}.

\mbox{\label{group__logging_ga422e471f30e790e893b9b9ed4a281fff}} 
\index{Osmocom logging framework@{Osmocom logging framework}!\_systemd\_raw\_output@{\_systemd\_raw\_output}}
\index{\_systemd\_raw\_output@{\_systemd\_raw\_output}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{\_systemd\_raw\_output()}
{\footnotesize\ttfamily static void \+\_\+systemd\+\_\+raw\+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{subsys,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{va\+\_\+list}]{ap }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ file()}, \textbf{ level}, \textbf{ log\+\_\+category\+\_\+name()}, \textbf{ logp2syslog\+\_\+level()}, and \textbf{ subsys}.



Referenced by \textbf{ log\+\_\+target\+\_\+systemd\+\_\+set\+\_\+raw()}.

\mbox{\label{group__logging_gae3277bfadd5b4e5bc609d85a1c53b5e0}} 
\index{Osmocom logging framework@{Osmocom logging framework}!assert\_loginfo@{assert\_loginfo}}
\index{assert\_loginfo@{assert\_loginfo}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{assert\_loginfo()}
{\footnotesize\ttfamily void assert\+\_\+loginfo (\begin{DoxyParamCaption}\item[{const char $\ast$}]{src }\end{DoxyParamCaption})}



References \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+log\+\_\+info}.



Referenced by \textbf{ log\+\_\+check\+\_\+level()}, \textbf{ log\+\_\+parse\+\_\+category()}, \textbf{ log\+\_\+parse\+\_\+category\+\_\+mask()}, and \textbf{ log\+\_\+target\+\_\+create()}.

\mbox{\label{group__logging_ga04683f168464a0f680e79baf747560b1}} 
\index{Osmocom logging framework@{Osmocom logging framework}!color@{color}}
\index{color@{color}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{color()}
{\footnotesize\ttfamily static const char $\ast$ color (\begin{DoxyParamCaption}\item[{int}]{subsys }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+info\+\_\+cat\+::color}, \textbf{ osmo\+\_\+log\+\_\+info}, and \textbf{ subsys}.



Referenced by \textbf{ \+\_\+output\+\_\+buf()}, \textbf{ rb\+\_\+erase()}, and \textbf{ rb\+\_\+set\+\_\+color()}.

\mbox{\label{group__logging_ga1cf3db5ef2f4255d613011626cfc0770}} 
\index{Osmocom logging framework@{Osmocom logging framework}!const\_basename@{const\_basename}}
\index{const\_basename@{const\_basename}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{const\_basename()}
{\footnotesize\ttfamily static const char $\ast$ const\+\_\+basename (\begin{DoxyParamCaption}\item[{const char $\ast$}]{path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ \+\_\+output\+\_\+buf()}.

\mbox{\label{group__logging_gac42c4f25e487c6ca8ff16d511312819b}} 
\index{Osmocom logging framework@{Osmocom logging framework}!level\_color@{level\_color}}
\index{level\_color@{level\_color}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{level\_color()}
{\footnotesize\ttfamily static const char $\ast$ level\+\_\+color (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ c}, \textbf{ get\+\_\+value\+\_\+string()}, \textbf{ get\+\_\+value\+\_\+string\+\_\+or\+\_\+null()}, \textbf{ level}, \textbf{ level\+\_\+colors}, and \textbf{ LOGL\+\_\+\+FATAL}.



Referenced by \textbf{ \+\_\+output\+\_\+buf()}.

\mbox{\label{group__logging_ga8244b3910e42eb24294f53d52ce5e48d}} 
\index{Osmocom logging framework@{Osmocom logging framework}!LLIST\_HEAD@{LLIST\_HEAD}}
\index{LLIST\_HEAD@{LLIST\_HEAD}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{LLIST\_HEAD()}
{\footnotesize\ttfamily LLIST\+\_\+\+HEAD (\begin{DoxyParamCaption}\item[{\textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}}]{ }\end{DoxyParamCaption})}

\mbox{\label{group__logging_gaef366d8dcc3243892af1a86825b332c4}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_add\_target@{log\_add\_target}}
\index{log\_add\_target@{log\_add\_target}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_add\_target()}
{\footnotesize\ttfamily void log\+\_\+add\+\_\+target (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target }\end{DoxyParamCaption})}



Register a new log target with the logging core. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be registered \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::entry}, \textbf{ llist\+\_\+add\+\_\+tail()}, \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}, and \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}.



Referenced by \textbf{ osmo\+\_\+init\+\_\+logging2()}.

\mbox{\label{group__logging_ga308e775a3d9188a9d9f8b814073c503f}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_cache\_check@{log\_cache\_check}}
\index{log\_cache\_check@{log\_cache\_check}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_cache\_check()}
{\footnotesize\ttfamily static bool log\+\_\+cache\+\_\+check (\begin{DoxyParamCaption}\item[{int}]{mapped\+\_\+subsys,  }\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Queries log level cache. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em mapped\+\_\+subsys} & plain category index (after mapping) \\
\hline
\mbox{\texttt{ in}}  & {\em level} & log level \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
true if logging should happen for at least one log target 
\end{DoxyReturn}


References \textbf{ level}, and \textbf{ log\+\_\+level\+\_\+lookup\+\_\+cache}.



Referenced by \textbf{ log\+\_\+check\+\_\+level()}, and \textbf{ osmo\+\_\+vlogp()}.

\mbox{\label{group__logging_gae486c7d4d9df85a56c39c357d5941d6b}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_cache\_enable@{log\_cache\_enable}}
\index{log\_cache\_enable@{log\_cache\_enable}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_cache\_enable()}
{\footnotesize\ttfamily int log\+\_\+cache\+\_\+enable (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Enable the log level lookup cache to bypass string formatting and other code for log statements which are not actually enabled/needed by any existing log target. 

\textbackslash{}retruns 0 in case of success, negative -\/errno in case of error. 

References \textbf{ ENOTSUP}, \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}, \textbf{ log\+\_\+level\+\_\+lookup\+\_\+cache}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, and \textbf{ osmo\+\_\+log\+\_\+info}.

\mbox{\label{group__logging_gaccccc6015ad7dac48806a1911c7bfac6}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_cache\_update@{log\_cache\_update}}
\index{log\_cache\_update@{log\_cache\_update}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_cache\_update()}
{\footnotesize\ttfamily void log\+\_\+cache\+\_\+update (\begin{DoxyParamCaption}\item[{int}]{mapped\+\_\+subsys,  }\item[{uint8\+\_\+t}]{enabled,  }\item[{uint8\+\_\+t}]{level }\end{DoxyParamCaption})}



Updates single cache entry, caller must hold osmo\+\_\+log\+\_\+tgt\+\_\+mutex. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em mapped\+\_\+subsys} & plain category index (after mapping) \\
\hline
\mbox{\texttt{ in}}  & {\em enabled} & log category enabled? \\
\hline
\mbox{\texttt{ in}}  & {\em level} & log level \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ level}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ log\+\_\+level\+\_\+lookup\+\_\+cache}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, \textbf{ OSMO\+\_\+\+MAX}, and \textbf{ OSMO\+\_\+\+MIN}.



Referenced by \textbf{ log\+\_\+set\+\_\+category\+\_\+filter()}, and \textbf{ log\+\_\+target\+\_\+create()}.

\mbox{\label{group__logging_ga3e9c5ea0653cc0df9d2d4ad1f1736a6e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_cache\_update\_all@{log\_cache\_update\_all}}
\index{log\_cache\_update\_all@{log\_cache\_update\_all}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_cache\_update\_all()}
{\footnotesize\ttfamily static void log\+\_\+cache\+\_\+update\+\_\+all (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Updates cache for all targets for all categies, caller must hold osmo\+\_\+log\+\_\+tgt\+\_\+mutex. 



References \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ log\+\_\+target\+::entry}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ log\+\_\+level\+\_\+lookup\+\_\+cache}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, \textbf{ OSMO\+\_\+\+MAX}, and \textbf{ OSMO\+\_\+\+MIN}.



Referenced by \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+cache\+\_\+enable()}, \textbf{ log\+\_\+del\+\_\+target()}, \textbf{ log\+\_\+parse\+\_\+category\+\_\+mask()}, and \textbf{ log\+\_\+set\+\_\+log\+\_\+level()}.

\mbox{\label{group__logging_ga8114da96a88591aa817c38f98c119be1}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_category\_name@{log\_category\_name}}
\index{log\_category\_name@{log\_category\_name}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_category\_name()}
{\footnotesize\ttfamily const char $\ast$ log\+\_\+category\+\_\+name (\begin{DoxyParamCaption}\item[{int}]{subsys }\end{DoxyParamCaption})}



References \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+info\+\_\+cat\+::name}, \textbf{ osmo\+\_\+log\+\_\+info}, and \textbf{ subsys}.



Referenced by \textbf{ \+\_\+gsmtap\+\_\+raw\+\_\+output()}, \textbf{ \+\_\+output\+\_\+buf()}, and \textbf{ \+\_\+systemd\+\_\+raw\+\_\+output()}.

\mbox{\label{group__logging_ga6fbd4bc9164c5f5460b1ccbc1007b890}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_check\_level@{log\_check\_level}}
\index{log\_check\_level@{log\_check\_level}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_check\_level()}
{\footnotesize\ttfamily int log\+\_\+check\+\_\+level (\begin{DoxyParamCaption}\item[{int}]{subsys,  }\item[{unsigned int}]{level }\end{DoxyParamCaption})}



Check whether a log entry will be generated. 

\begin{DoxyReturn}{Returns}
!= 0 if a log entry might get generated by at least one target 
\end{DoxyReturn}


References \textbf{ assert\+\_\+loginfo()}, \textbf{ log\+\_\+target\+::entry}, \textbf{ level}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ log\+\_\+cache\+\_\+check()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}, \textbf{ map\+\_\+subsys()}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, \textbf{ should\+\_\+log\+\_\+to\+\_\+target()}, and \textbf{ subsys}.

\mbox{\label{group__logging_gaef66f7f410135e85ab7d640969059e52}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_del\_target@{log\_del\_target}}
\index{log\_del\_target@{log\_del\_target}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_del\_target()}
{\footnotesize\ttfamily void log\+\_\+del\+\_\+target (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target }\end{DoxyParamCaption})}



Unregister a log target from the logging core. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be unregistered \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::entry}, \textbf{ llist\+\_\+del()}, and \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}.



Referenced by \textbf{ log\+\_\+target\+\_\+destroy()}.

\mbox{\label{group__logging_gacf9953bad5917dc2e72507fbf4308df6}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_enable\_multithread@{log\_enable\_multithread}}
\index{log\_enable\_multithread@{log\_enable\_multithread}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_enable\_multithread()}
{\footnotesize\ttfamily void log\+\_\+enable\+\_\+multithread (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Enable multithread support (mutex) in libosmocore logging system. 

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

References \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex}, and \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex\+\_\+on}.

\mbox{\label{group__logging_gab764c12d013acf2af98b24058a4bb894}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_fini@{log\_fini}}
\index{log\_fini@{log\_fini}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_fini()}
{\footnotesize\ttfamily void log\+\_\+fini (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



References \textbf{ log\+\_\+target\+::entry}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry\+\_\+safe}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, and \textbf{ tall\+\_\+log\+\_\+ctx}.

\mbox{\label{group__logging_gabf0d1770253db45f43db9344e950a724}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_init@{log\_init}}
\index{log\_init@{log\_init}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_init()}
{\footnotesize\ttfamily int log\+\_\+init (\begin{DoxyParamCaption}\item[{const struct \textbf{ log\+\_\+info} $\ast$}]{inf,  }\item[{void $\ast$}]{ctx }\end{DoxyParamCaption})}



Initialize the Osmocom logging core. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em inf} & Information regarding logging categories, could be NULL \\
\hline
\mbox{\texttt{ in}}  & {\em ctx} & talloc context for logging allocations \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 in case of success, negative in case of error
\end{DoxyReturn}
If inf is NULL then only library-\/internal categories are initialized. 

References \textbf{ ARRAY\+\_\+\+SIZE}, \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+info\+::filter\+\_\+fn}, \textbf{ internal\+\_\+cat}, \textbf{ LOGL\+\_\+\+NOTICE}, \textbf{ log\+\_\+info\+\_\+cat\+::loglevel}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ log\+\_\+info\+::num\+\_\+cat\+\_\+user}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+log\+\_\+info}, and \textbf{ tall\+\_\+log\+\_\+ctx}.



Referenced by \textbf{ osmo\+\_\+init\+\_\+logging2()}.

\mbox{\label{group__logging_ga72d0cddff0823055cf7dbf195f96bba1}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_level\_str@{log\_level\_str}}
\index{log\_level\_str@{log\_level\_str}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_level\_str()}
{\footnotesize\ttfamily const char $\ast$ log\+\_\+level\+\_\+str (\begin{DoxyParamCaption}\item[{unsigned int}]{lvl }\end{DoxyParamCaption})}



convert a numeric log level into human-\/readable string 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em lvl} & numeric log level \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
zero-\/terminated string (log level name) 
\end{DoxyReturn}


References \textbf{ get\+\_\+value\+\_\+string()}, and \textbf{ loglevel\+\_\+strs}.



Referenced by \textbf{ \+\_\+output\+\_\+buf()}.

\mbox{\label{group__logging_gacacb1583518cb0b46d50cf5e98200f54}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_parse\_category@{log\_parse\_category}}
\index{log\_parse\_category@{log\_parse\_category}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_parse\_category()}
{\footnotesize\ttfamily int log\+\_\+parse\+\_\+category (\begin{DoxyParamCaption}\item[{const char $\ast$}]{category }\end{DoxyParamCaption})}



parse a human-\/readable log category into numeric form 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em category} & human-\/readable log category name \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
numeric category value, or -\/EINVAL otherwise 
\end{DoxyReturn}


References \textbf{ assert\+\_\+loginfo()}, \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+info\+\_\+cat\+::name}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, and \textbf{ osmo\+\_\+log\+\_\+info}.

\mbox{\label{group__logging_ga4cc6ca4580aff12753717030c1e0ef23}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_parse\_category\_mask@{log\_parse\_category\_mask}}
\index{log\_parse\_category\_mask@{log\_parse\_category\_mask}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_parse\_category\_mask()}
{\footnotesize\ttfamily void log\+\_\+parse\+\_\+category\+\_\+mask (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{const char $\ast$}]{\+\_\+mask }\end{DoxyParamCaption})}



parse the log category mask 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & log target to be configured \\
\hline
\mbox{\texttt{ in}}  & {\em \+\_\+mask} & log category mask string\\
\hline
\end{DoxyParams}
The format can be this\+: category1\+:category2\+:category3 or category1,2\+:category2,3\+:... 

References \textbf{ assert\+\_\+loginfo()}, \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ length}, \textbf{ level}, \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+info\+\_\+cat\+::name}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ osmo\+\_\+log\+\_\+info}.

\mbox{\label{group__logging_ga3b291716f99d275bc17aaba56668fa54}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_parse\_level@{log\_parse\_level}}
\index{log\_parse\_level@{log\_parse\_level}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_parse\_level()}
{\footnotesize\ttfamily int log\+\_\+parse\+\_\+level (\begin{DoxyParamCaption}\item[{const char $\ast$}]{lvl }\end{DoxyParamCaption})}



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


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em lvl} & zero-\/terminated string containing log level name \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
numeric log level 
\end{DoxyReturn}


References \textbf{ get\+\_\+string\+\_\+value()}, and \textbf{ loglevel\+\_\+strs}.

\mbox{\label{group__logging_gaf69d0014231702905b70af36ba2161d6}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_reset\_context@{log\_reset\_context}}
\index{log\_reset\_context@{log\_reset\_context}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_reset\_context()}
{\footnotesize\ttfamily void log\+\_\+reset\+\_\+context (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Reset (clear) the logging context. 

\mbox{\label{group__logging_ga472e144e4786d4622383e8040ee44d91}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_all\_filter@{log\_set\_all\_filter}}
\index{log\_set\_all\_filter@{log\_set\_all\_filter}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_all\_filter()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+all\+\_\+filter (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{all }\end{DoxyParamCaption})}



Enable the \doxyref{LOG\+\_\+\+FLT\+\_\+\+ALL}{p.}{group__logging_gga06c744d8d9104f275d8b8568c09fd144ab84e1400c3d6394a42c59ebb5804d35f} log filter. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em all} & enable (1) or disable (0) the ALL filter\\
\hline
\end{DoxyParams}
When the \doxyref{LOG\+\_\+\+FLT\+\_\+\+ALL}{p.}{group__logging_gga06c744d8d9104f275d8b8568c09fd144ab84e1400c3d6394a42c59ebb5804d35f} filter is enabled, all log messages will be printed. It acts as a wildcard. Setting it to {\itshape 1} means there is no filtering. 

References \textbf{ log\+\_\+target\+::filter\+\_\+map}, and \textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL}.



Referenced by \textbf{ osmo\+\_\+init\+\_\+logging2()}.

\mbox{\label{group__logging_gaac26114e404387c4ebcc5b3cee8bddba}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_category\_filter@{log\_set\_category\_filter}}
\index{log\_set\_category\_filter@{log\_set\_category\_filter}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_category\_filter()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+category\+\_\+filter (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{category,  }\item[{int}]{enable,  }\item[{int}]{level }\end{DoxyParamCaption})}



Set a category filter on a given log target. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em category} & Log category to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em enable} & whether to enable or disable the filter \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Log level of the filter \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ level}, \textbf{ log\+\_\+cache\+\_\+update()}, \textbf{ log\+\_\+category\+::loglevel}, and \textbf{ map\+\_\+subsys()}.

\mbox{\label{group__logging_ga4e6b63f4ef308f052b63a439e6a49033}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_context@{log\_set\_context}}
\index{log\_set\_context@{log\_set\_context}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_context()}
{\footnotesize\ttfamily int log\+\_\+set\+\_\+context (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{ctx\+\_\+nr,  }\item[{void $\ast$}]{value }\end{DoxyParamCaption})}



Set the logging context. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em ctx\+\_\+nr} & logging context number \\
\hline
\mbox{\texttt{ in}}  & {\em value} & value to which the context is to be set \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 in case of success; negative otherwise
\end{DoxyReturn}
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 \textbf{ log\+\_\+context\+::ctx}, and \textbf{ LOG\+\_\+\+MAX\+\_\+\+CTX}.

\mbox{\label{group__logging_ga608bb905a1d46b3f30c91ab2b5c791cb}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_log\_level@{log\_set\_log\_level}}
\index{log\_set\_log\_level@{log\_set\_log\_level}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_log\_level()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+log\+\_\+level (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{log\+\_\+level }\end{DoxyParamCaption})}



Set the global log level for a given log target. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em log\+\_\+level} & New global log level \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}, and \textbf{ log\+\_\+target\+::loglevel}.

\mbox{\label{group__logging_ga1f27605b22a68418f3b1304cb347b3dd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_category@{log\_set\_print\_category}}
\index{log\_set\_print\_category@{log\_set\_print\_category}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_category()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+category (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+category }\end{DoxyParamCaption})}



Enable or disable printing of the category name. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+category} & Enable (1) or disable (0) filenames\\
\hline
\end{DoxyParams}
Print the category/subsys name in front of every log message. 

References \textbf{ log\+\_\+target\+::print\+\_\+category}.

\mbox{\label{group__logging_ga37155c559dfa73b1a2d83746116326fa}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_category\_hex@{log\_set\_print\_category\_hex}}
\index{log\_set\_print\_category\_hex@{log\_set\_print\_category\_hex}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_category\_hex()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+category\+\_\+hex (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+category\+\_\+hex }\end{DoxyParamCaption})}



Enable or disable printing of the category number in hex (\textquotesingle{}$<$000b$>$\textquotesingle{}). 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected. \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+category\+\_\+hex} & Enable (1) or disable (0) hex category. \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::print\+\_\+category\+\_\+hex}.



Referenced by \textbf{ log\+\_\+set\+\_\+print\+\_\+filename()}.

\mbox{\label{group__logging_gaa7485ba761bb91b3b1551d0532c10255}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_extended\_timestamp@{log\_set\_print\_extended\_timestamp}}
\index{log\_set\_print\_extended\_timestamp@{log\_set\_print\_extended\_timestamp}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_extended\_timestamp()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+extended\+\_\+timestamp (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+timestamp }\end{DoxyParamCaption})}



Enable or disable printing of extended timestamps while logging. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+timestamp} & Enable (1) or disable (0) timestamps\\
\hline
\end{DoxyParams}
When both timestamp and extended timestamp is enabled then only the extended timestamp will be used. The format of the timestamp is YYYYMMDDhhmmssnnn. 

References \textbf{ log\+\_\+target\+::print\+\_\+ext\+\_\+timestamp}, and \textbf{ log\+\_\+target\+::print\+\_\+timestamp}.

\mbox{\label{group__logging_gae3ba3b5fcc019f7359704a7a6ee212ed}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_filename@{log\_set\_print\_filename}}
\index{log\_set\_print\_filename@{log\_set\_print\_filename}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_filename()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+filename (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+filename }\end{DoxyParamCaption})}



Use \doxyref{log\+\_\+set\+\_\+print\+\_\+filename2()}{p.}{group__logging_ga878f19493806866c6dbf2d7741aaa9e6} instead. 

Call \doxyref{log\+\_\+set\+\_\+print\+\_\+filename2()}{p.}{group__logging_ga878f19493806866c6dbf2d7741aaa9e6} with LOG\+\_\+\+FILENAME\+\_\+\+PATH or LOG\+\_\+\+FILENAME\+\_\+\+NONE, {\itshape as well as} call \doxyref{log\+\_\+set\+\_\+print\+\_\+category\+\_\+hex()}{p.}{group__logging_ga37155c559dfa73b1a2d83746116326fa} 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 \doxyref{log\+\_\+set\+\_\+print\+\_\+filename()}{p.}{group__logging_gae3ba3b5fcc019f7359704a7a6ee212ed}, many unit tests (in libosmocore as well as dependent projects) would fail since they expect the category to disappear along with the filename. 
\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+filename} & Enable (1) or disable (0) filenames \\
\hline
\end{DoxyParams}


References \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+NONE}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+PATH}, \textbf{ log\+\_\+set\+\_\+print\+\_\+category\+\_\+hex()}, \textbf{ log\+\_\+set\+\_\+print\+\_\+filename2()}, and \textbf{ log\+\_\+target\+::print\+\_\+filename}.

\mbox{\label{group__logging_ga878f19493806866c6dbf2d7741aaa9e6}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_filename2@{log\_set\_print\_filename2}}
\index{log\_set\_print\_filename2@{log\_set\_print\_filename2}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_filename2()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+filename2 (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{enum \textbf{ log\+\_\+filename\+\_\+type}}]{lft }\end{DoxyParamCaption})}



Enable or disable printing of the filename while logging. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected. \\
\hline
\mbox{\texttt{ in}}  & {\em lft} & An LOG\+\_\+\+FILENAME\+\_\+$\ast$ 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. \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::print\+\_\+filename2}.



Referenced by \textbf{ log\+\_\+set\+\_\+print\+\_\+filename()}.

\mbox{\label{group__logging_ga4f59f85a6eeef26a90e9909e0f45419e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_filename\_pos@{log\_set\_print\_filename\_pos}}
\index{log\_set\_print\_filename\_pos@{log\_set\_print\_filename\_pos}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_filename\_pos()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+filename\+\_\+pos (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{enum \textbf{ log\+\_\+filename\+\_\+pos}}]{pos }\end{DoxyParamCaption})}



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


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected. \\
\hline
\mbox{\texttt{ in}}  & {\em pos} & A LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+$\ast$ 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 \textquotesingle{}~\newline
\textquotesingle{} to end the \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::print\+\_\+filename\+\_\+pos}.

\mbox{\label{group__logging_ga46786df78108657560700c8d99f9a542}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_level@{log\_set\_print\_level}}
\index{log\_set\_print\_level@{log\_set\_print\_level}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_level()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+level (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+level }\end{DoxyParamCaption})}



Enable or disable printing of the log level name. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+level} & Enable (1) or disable (0) log level name\\
\hline
\end{DoxyParams}
Print the log level name in front of every log message. 

References \textbf{ log\+\_\+target\+::print\+\_\+level}.

\mbox{\label{group__logging_ga322b5ead8114170321047a0a6cf62bdb}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_tid@{log\_set\_print\_tid}}
\index{log\_set\_print\_tid@{log\_set\_print\_tid}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_tid()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+tid (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+tid }\end{DoxyParamCaption})}



Enable or disable printing of timestamps while logging. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+tid} & Enable (1) or disable (0) Thread ID logging \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::print\+\_\+tid}.

\mbox{\label{group__logging_gaee1b4940beeafc3be87dade21fca15cd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_print\_timestamp@{log\_set\_print\_timestamp}}
\index{log\_set\_print\_timestamp@{log\_set\_print\_timestamp}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_print\_timestamp()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+print\+\_\+timestamp (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{print\+\_\+timestamp }\end{DoxyParamCaption})}



Enable or disable printing of timestamps while logging. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em print\+\_\+timestamp} & Enable (1) or disable (0) timestamps \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::print\+\_\+timestamp}.

\mbox{\label{group__logging_ga30d608c01397ebfdf5ea3751a2d77477}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_set\_use\_color@{log\_set\_use\_color}}
\index{log\_set\_use\_color@{log\_set\_use\_color}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_set\_use\_color()}
{\footnotesize\ttfamily void log\+\_\+set\+\_\+use\+\_\+color (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{int}]{use\+\_\+color }\end{DoxyParamCaption})}



Enable or disable the use of colored output. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & Log target to be affected \\
\hline
\mbox{\texttt{ in}}  & {\em use\+\_\+color} & Use color (1) or don\textquotesingle{}t use color (0) \\
\hline
\end{DoxyParams}


References \textbf{ log\+\_\+target\+::use\+\_\+color}.

\mbox{\label{group__logging_ga9f2aa41f93d7c8e659412640e9b03ea9}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create@{log\_target\_create}}
\index{log\_target\_create@{log\_target\_create}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Create a new log target skeleton. 

\begin{DoxyReturn}{Returns}
dynamically-\/allocated log target This funcition allocates a \doxyref{log\+\_\+target}{p.}{structlog__target} and initializes it with some default values. The newly created target is not registered yet. 
\end{DoxyReturn}


References \textbf{ assert\+\_\+loginfo()}, \textbf{ c}, \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ log\+\_\+info\+\_\+cat\+::enabled}, \textbf{ log\+\_\+target\+::entry}, \textbf{ INIT\+\_\+\+LLIST\+\_\+\+HEAD}, \textbf{ log\+\_\+cache\+\_\+update()}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+PATH}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+info\+\_\+cat\+::loglevel}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ log\+\_\+target\+::print\+\_\+category\+\_\+hex}, \textbf{ log\+\_\+target\+::print\+\_\+filename2}, \textbf{ log\+\_\+target\+::print\+\_\+tid}, \textbf{ log\+\_\+target\+::print\+\_\+timestamp}, \textbf{ tall\+\_\+log\+\_\+ctx}, and \textbf{ log\+\_\+target\+::use\+\_\+color}.



Referenced by \textbf{ log\+\_\+target\+\_\+create\+\_\+file()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+file\+\_\+stream()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+gsmtap()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+rb()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+stderr()}, and \textbf{ log\+\_\+target\+\_\+create\+\_\+systemd()}.

\mbox{\label{group__logging_ga1521542d251917511aec7ae3feac5b05}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create\_file@{log\_target\_create\_file}}
\index{log\_target\_create\_file@{log\_target\_create\_file}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create\_file()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+file (\begin{DoxyParamCaption}\item[{const char $\ast$}]{fname }\end{DoxyParamCaption})}



Create a new file-\/based log target using non-\/blocking write\+\_\+queue. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em fname} & File name of the new log file \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Log target in case of success, NULL otherwise 
\end{DoxyReturn}


References \textbf{ \+\_\+file\+\_\+raw\+\_\+output()}, \textbf{ \+\_\+file\+\_\+wq\+\_\+write\+\_\+cb()}, \textbf{ osmo\+\_\+wqueue\+::bfd}, \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ log\+\_\+target\+::fname}, \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+WQUEUE\+\_\+\+LEN}, \textbf{ MAX\+\_\+\+LOG\+\_\+\+SIZE}, \textbf{ osmo\+\_\+fd\+\_\+register()}, \textbf{ OSMO\+\_\+\+FD\+\_\+\+WRITE}, \textbf{ osmo\+\_\+wqueue\+\_\+init()}, \textbf{ log\+\_\+target\+::raw\+\_\+output}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::type}, \textbf{ osmo\+\_\+fd\+::when}, \textbf{ log\+\_\+target\+::wqueue}, and \textbf{ osmo\+\_\+wqueue\+::write\+\_\+cb}.

\mbox{\label{group__logging_ga7bb63faba31a9675e750c273d6657ac7}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create\_file\_stream@{log\_target\_create\_file\_stream}}
\index{log\_target\_create\_file\_stream@{log\_target\_create\_file\_stream}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create\_file\_stream()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+file\+\_\+stream (\begin{DoxyParamCaption}\item[{const char $\ast$}]{fname }\end{DoxyParamCaption})}



Create a new file-\/based log target using buffered, blocking stream output. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em fname} & File name of the new log file \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Log target in case of success, NULL otherwise 
\end{DoxyReturn}


References \textbf{ \+\_\+file\+\_\+output\+\_\+stream()}, \textbf{ log\+\_\+target\+::fname}, \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ log\+\_\+target\+::out}, \textbf{ log\+\_\+target\+::output}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, and \textbf{ log\+\_\+target\+::type}.

\mbox{\label{group__logging_ga4efed74fd274a942527f6c311ff5d4e9}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create\_gsmtap@{log\_target\_create\_gsmtap}}
\index{log\_target\_create\_gsmtap@{log\_target\_create\_gsmtap}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create\_gsmtap()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+gsmtap (\begin{DoxyParamCaption}\item[{const char $\ast$}]{host,  }\item[{uint16\+\_\+t}]{port,  }\item[{const char $\ast$}]{ident,  }\item[{bool}]{ofd\+\_\+wq\+\_\+mode,  }\item[{bool}]{add\+\_\+sink }\end{DoxyParamCaption})}



Create a new logging target for GSMTAP logging. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em host} & remote host to send the logs to \\
\hline
\mbox{\texttt{ in}}  & {\em port} & remote port to send the logs to \\
\hline
\mbox{\texttt{ in}}  & {\em ident} & string identifier \\
\hline
\mbox{\texttt{ in}}  & {\em ofd\+\_\+wq\+\_\+mode} & register \doxyref{osmo\+\_\+wqueue}{p.}{structosmo__wqueue} (1) or not (0) \\
\hline
\mbox{\texttt{ in}}  & {\em add\+\_\+sink} & add GSMTAP sink or not \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Log target in case of success, NULL in case of error 
\end{DoxyReturn}


References \textbf{ \+\_\+gsmtap\+\_\+raw\+\_\+output()}, \textbf{ log\+\_\+target\+::gsmtap\+\_\+inst}, \textbf{ gsmtap\+\_\+source\+\_\+add\+\_\+sink()}, \textbf{ gsmtap\+\_\+source\+\_\+init()}, \textbf{ log\+\_\+target\+::hostname}, \textbf{ log\+\_\+target\+::ident}, \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}, \textbf{ log\+\_\+target\+::raw\+\_\+output}, \textbf{ log\+\_\+target\+::tgt\+\_\+gsmtap}, and \textbf{ log\+\_\+target\+::type}.

\mbox{\label{group__logging_ga08b710a69267b50b7c26e2c7e87e5647}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create\_stderr@{log\_target\_create\_stderr}}
\index{log\_target\_create\_stderr@{log\_target\_create\_stderr}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create\_stderr()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+stderr (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Create the STDERR log target. 

\begin{DoxyReturn}{Returns}
dynamically-\/allocated \doxyref{log\+\_\+target}{p.}{structlog__target} for STDERR 
\end{DoxyReturn}


References \textbf{ \+\_\+file\+\_\+output\+\_\+stream()}, \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ log\+\_\+target\+::out}, \textbf{ log\+\_\+target\+::output}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, and \textbf{ log\+\_\+target\+::type}.



Referenced by \textbf{ osmo\+\_\+init\+\_\+logging2()}.

\mbox{\label{group__logging_gaeee882e225104fac94d0b8daa048e303}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create\_syslog@{log\_target\_create\_syslog}}
\index{log\_target\_create\_syslog@{log\_target\_create\_syslog}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create\_syslog()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+syslog (\begin{DoxyParamCaption}\item[{const char $\ast$}]{ident,  }\item[{int}]{option,  }\item[{int}]{facility }\end{DoxyParamCaption})}

\mbox{\label{group__logging_ga8ca192ef2740d2877292f2bec39a54cb}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_create\_systemd@{log\_target\_create\_systemd}}
\index{log\_target\_create\_systemd@{log\_target\_create\_systemd}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_create\_systemd()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+systemd (\begin{DoxyParamCaption}\item[{bool}]{raw }\end{DoxyParamCaption})}



Create a new logging target for systemd journal logging. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em raw} & whether to offload rendering of the meta information (location, category) to systemd-\/journal. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Log target in case of success, NULL in case of error. 
\end{DoxyReturn}


References \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ log\+\_\+target\+\_\+systemd\+\_\+set\+\_\+raw()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSTEMD}, \textbf{ log\+\_\+target\+::raw}, and \textbf{ log\+\_\+target\+::type}.

\mbox{\label{group__logging_ga6bbfb2ce2a9ba3dea3b3c1204485b719}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_destroy@{log\_target\_destroy}}
\index{log\_target\_destroy@{log\_target\_destroy}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_destroy()}
{\footnotesize\ttfamily void log\+\_\+target\+\_\+destroy (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target }\end{DoxyParamCaption})}



Unregister, close and delete a log target. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & log target to unregister, close and delete \\
\hline
\end{DoxyParams}


References \textbf{ osmo\+\_\+wqueue\+::bfd}, \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ log\+\_\+target\+::fname}, \textbf{ log\+\_\+target\+::gsmtap\+\_\+inst}, \textbf{ gsmtap\+\_\+source\+\_\+free()}, \textbf{ log\+\_\+del\+\_\+target()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSLOG}, \textbf{ osmo\+\_\+fd\+\_\+unregister()}, \textbf{ osmo\+\_\+wqueue\+\_\+clear()}, \textbf{ log\+\_\+target\+::out}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::tgt\+\_\+gsmtap}, \textbf{ log\+\_\+target\+::type}, and \textbf{ log\+\_\+target\+::wqueue}.



Referenced by \textbf{ log\+\_\+fini()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+file()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+file\+\_\+stream()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+gsmtap()}, and \textbf{ log\+\_\+target\+\_\+create\+\_\+rb()}.

\mbox{\label{group__logging_ga3147a2bfbed44aef8b0789ae0d3b8acd}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_file\_reopen@{log\_target\_file\_reopen}}
\index{log\_target\_file\_reopen@{log\_target\_file\_reopen}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_file\_reopen()}
{\footnotesize\ttfamily int log\+\_\+target\+\_\+file\+\_\+reopen (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target }\end{DoxyParamCaption})}



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


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & log target to re-\/open \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 in case of success; negative otherwise 
\end{DoxyReturn}


References \textbf{ osmo\+\_\+wqueue\+::bfd}, \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ log\+\_\+target\+::fname}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fd\+\_\+register()}, \textbf{ osmo\+\_\+fd\+\_\+unregister()}, \textbf{ log\+\_\+target\+::out}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::type}, and \textbf{ log\+\_\+target\+::wqueue}.



Referenced by \textbf{ log\+\_\+targets\+\_\+reopen()}.

\mbox{\label{group__logging_gae324d978485dd51ac8f0a1057418a249}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_file\_switch\_to\_stream@{log\_target\_file\_switch\_to\_stream}}
\index{log\_target\_file\_switch\_to\_stream@{log\_target\_file\_switch\_to\_stream}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_file\_switch\_to\_stream()}
{\footnotesize\ttfamily int log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+stream (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target }\end{DoxyParamCaption})}



switch from non-\/blocking/write-\/queue to blocking + buffered stream output 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & log target which we should switch \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; 1 if already switched before; negative on error Must be called with mutex osmo\+\_\+log\+\_\+tgt\+\_\+mutex held, see log\+\_\+tgt\+\_\+mutex\+\_\+lock. 
\end{DoxyReturn}


References \textbf{ \+\_\+file\+\_\+output\+\_\+stream()}, \textbf{ osmo\+\_\+wqueue\+::bfd}, \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ log\+\_\+target\+::fname}, \textbf{ llist\+\_\+empty()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ msg}, \textbf{ osmo\+\_\+wqueue\+::msg\+\_\+queue}, \textbf{ msgb\+\_\+data()}, \textbf{ msgb\+\_\+dequeue()}, \textbf{ msgb\+\_\+free()}, \textbf{ msgb\+\_\+length()}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+fd\+\_\+unregister()}, \textbf{ log\+\_\+target\+::out}, \textbf{ log\+\_\+target\+::output}, \textbf{ log\+\_\+target\+::raw\+\_\+output}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::type}, and \textbf{ log\+\_\+target\+::wqueue}.

\mbox{\label{group__logging_ga117469c362a121ecbdd997a1c0612c6c}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_file\_switch\_to\_wqueue@{log\_target\_file\_switch\_to\_wqueue}}
\index{log\_target\_file\_switch\_to\_wqueue@{log\_target\_file\_switch\_to\_wqueue}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_file\_switch\_to\_wqueue()}
{\footnotesize\ttfamily int log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+wqueue (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target }\end{DoxyParamCaption})}



switch from blocking + buffered file output to non-\/blocking write-\/queue based output. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & log target which we should switch \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0 on success; 1 if already switched before; negative on error Must be called with mutex osmo\+\_\+log\+\_\+tgt\+\_\+mutex held, see log\+\_\+tgt\+\_\+mutex\+\_\+lock. 
\end{DoxyReturn}


References \textbf{ \+\_\+file\+\_\+raw\+\_\+output()}, \textbf{ \+\_\+file\+\_\+wq\+\_\+write\+\_\+cb()}, \textbf{ osmo\+\_\+wqueue\+::bfd}, \textbf{ osmo\+\_\+fd\+::fd}, \textbf{ log\+\_\+target\+::fname}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+WQUEUE\+\_\+\+LEN}, \textbf{ MAX\+\_\+\+LOG\+\_\+\+SIZE}, \textbf{ osmo\+\_\+fd\+\_\+register()}, \textbf{ OSMO\+\_\+\+FD\+\_\+\+WRITE}, \textbf{ osmo\+\_\+wqueue\+\_\+init()}, \textbf{ log\+\_\+target\+::out}, \textbf{ log\+\_\+target\+::output}, \textbf{ log\+\_\+target\+::raw\+\_\+output}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::type}, \textbf{ osmo\+\_\+fd\+::when}, \textbf{ log\+\_\+target\+::wqueue}, and \textbf{ osmo\+\_\+wqueue\+::write\+\_\+cb}.

\mbox{\label{group__logging_gacd942dd5269a031f3f94bfdb90b9dd22}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_find@{log\_target\_find}}
\index{log\_target\_find@{log\_target\_find}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_find()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+find (\begin{DoxyParamCaption}\item[{enum \textbf{ log\+\_\+target\+\_\+type}}]{type,  }\item[{const char $\ast$}]{fname }\end{DoxyParamCaption})}



Find a registered log target. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em type} & Log target type \\
\hline
\mbox{\texttt{ in}}  & {\em fname} & File name \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Log target (if found), NULL otherwise Must be called with mutex osmo\+\_\+log\+\_\+tgt\+\_\+mutex held, see log\+\_\+tgt\+\_\+mutex\+\_\+lock. 
\end{DoxyReturn}


References \textbf{ log\+\_\+target\+::entry}, \textbf{ log\+\_\+target\+::fname}, \textbf{ log\+\_\+target\+::hostname}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::tgt\+\_\+gsmtap}, \textbf{ type}, and \textbf{ log\+\_\+target\+::type}.

\mbox{\label{group__logging_gafe72f96e070180cbbf2073a9806c9259}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_target\_systemd\_set\_raw@{log\_target\_systemd\_set\_raw}}
\index{log\_target\_systemd\_set\_raw@{log\_target\_systemd\_set\_raw}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_target\_systemd\_set\_raw()}
{\footnotesize\ttfamily void log\+\_\+target\+\_\+systemd\+\_\+set\+\_\+raw (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{target,  }\item[{bool}]{raw }\end{DoxyParamCaption})}



Change meta information handling of an existing logging target. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em target} & logging target to be modified. \\
\hline
\mbox{\texttt{ in}}  & {\em raw} & whether to offload rendering of the meta information (location, category) to systemd-\/journal. \\
\hline
\end{DoxyParams}


References \textbf{ \+\_\+systemd\+\_\+output()}, \textbf{ \+\_\+systemd\+\_\+raw\+\_\+output()}, \textbf{ log\+\_\+target\+::output}, \textbf{ log\+\_\+target\+::raw}, \textbf{ log\+\_\+target\+::raw\+\_\+output}, and \textbf{ log\+\_\+target\+::sd\+\_\+journal}.



Referenced by \textbf{ log\+\_\+target\+\_\+create\+\_\+systemd()}.

\mbox{\label{group__logging_gae3a0a25f7c25582eb297470a040bcaf0}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_targets\_reopen@{log\_targets\_reopen}}
\index{log\_targets\_reopen@{log\_targets\_reopen}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_targets\_reopen()}
{\footnotesize\ttfamily int log\+\_\+targets\+\_\+reopen (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



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

\begin{DoxyReturn}{Returns}
0 in case of success; negative otherwise 
\end{DoxyReturn}


References \textbf{ log\+\_\+target\+::entry}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ log\+\_\+target\+\_\+file\+\_\+reopen()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, and \textbf{ log\+\_\+target\+::type}.



Referenced by \textbf{ sighup\+\_\+hdlr()}.

\mbox{\label{group__logging_ga1f4bbcd8f332fd3c10618257fd381aae}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_tgt\_mutex\_lock\_impl@{log\_tgt\_mutex\_lock\_impl}}
\index{log\_tgt\_mutex\_lock\_impl@{log\_tgt\_mutex\_lock\_impl}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_tgt\_mutex\_lock\_impl()}
{\footnotesize\ttfamily void log\+\_\+tgt\+\_\+mutex\+\_\+lock\+\_\+impl (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Acquire the osmo\+\_\+log\+\_\+tgt\+\_\+mutex. 

Don\textquotesingle{}t use this function directly, always use macro \doxyref{log\+\_\+tgt\+\_\+mutex\+\_\+lock()}{p.}{group__logging_gac6cbd7eddb65044f30ff543a421ae495} instead. 

References \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex}, and \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex\+\_\+on}.

\mbox{\label{group__logging_ga18a5be7b0f60ed441b102f3ae81204ee}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_tgt\_mutex\_unlock\_impl@{log\_tgt\_mutex\_unlock\_impl}}
\index{log\_tgt\_mutex\_unlock\_impl@{log\_tgt\_mutex\_unlock\_impl}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_tgt\_mutex\_unlock\_impl()}
{\footnotesize\ttfamily void log\+\_\+tgt\+\_\+mutex\+\_\+unlock\+\_\+impl (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Release the osmo\+\_\+log\+\_\+tgt\+\_\+mutex. 

Don\textquotesingle{}t use this function directly, always use macro \doxyref{log\+\_\+tgt\+\_\+mutex\+\_\+unlock()}{p.}{group__logging_ga4070dabf4652e43fd6929fb259a6fa92} instead. 

References \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex}, and \textbf{ osmo\+\_\+log\+\_\+tgt\+\_\+mutex\+\_\+on}.

\mbox{\label{group__logging_gab324ed3d4a2cf52b7221f64f6e24ffa5}} 
\index{Osmocom logging framework@{Osmocom logging framework}!logp@{logp}}
\index{logp@{logp}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{logp()}
{\footnotesize\ttfamily void logp (\begin{DoxyParamCaption}\item[{int}]{subsys,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{}]{... }\end{DoxyParamCaption})}



logging function used by \doxyref{DEBUGP()}{p.}{group__logging_gab805322bc0052e2cb6b6a6557fd59e91} macro 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em subsys} & Logging sub-\/system \\
\hline
\mbox{\texttt{ in}}  & {\em file} & name of source code file \\
\hline
\mbox{\texttt{ in}}  & {\em cont} & continuation (1) or new line (0) \\
\hline
\mbox{\texttt{ in}}  & {\em format} & format string \\
\hline
\end{DoxyParams}


References \textbf{ file()}, \textbf{ LOGL\+\_\+\+DEBUG}, \textbf{ osmo\+\_\+vlogp()}, and \textbf{ subsys}.

\mbox{\label{group__logging_gae7c013af52c801dbfe79b8a8a3801c5e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!logp2@{logp2}}
\index{logp2@{logp2}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{logp2()}
{\footnotesize\ttfamily void logp2 (\begin{DoxyParamCaption}\item[{int}]{subsys,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{}]{... }\end{DoxyParamCaption})}



logging function used by \doxyref{LOGP()}{p.}{group__logging_ga7e3a9f703edc9b95a8548a656a6f686d} macro 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em subsys} & Logging sub-\/system \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Log level \\
\hline
\mbox{\texttt{ in}}  & {\em file} & name of source code file \\
\hline
\mbox{\texttt{ in}}  & {\em cont} & continuation (1) or new line (0) \\
\hline
\mbox{\texttt{ in}}  & {\em format} & format string \\
\hline
\end{DoxyParams}


References \textbf{ file()}, \textbf{ level}, \textbf{ osmo\+\_\+vlogp()}, \textbf{ subsys}, and \textbf{ TRACE}.

\mbox{\label{group__logging_ga8e2436af7e6195055c738e37b1016bb9}} 
\index{Osmocom logging framework@{Osmocom logging framework}!logp2syslog\_level@{logp2syslog\_level}}
\index{logp2syslog\_level@{logp2syslog\_level}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{logp2syslog\_level()}
{\footnotesize\ttfamily static int logp2syslog\+\_\+level (\begin{DoxyParamCaption}\item[{unsigned int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ level}, \textbf{ LOGL\+\_\+\+ERROR}, \textbf{ LOGL\+\_\+\+FATAL}, \textbf{ LOGL\+\_\+\+INFO}, and \textbf{ LOGL\+\_\+\+NOTICE}.



Referenced by \textbf{ \+\_\+systemd\+\_\+output()}, and \textbf{ \+\_\+systemd\+\_\+raw\+\_\+output()}.

\mbox{\label{group__logging_gac80553bb76fe67acb9834a128700c12d}} 
\index{Osmocom logging framework@{Osmocom logging framework}!logp\_stub@{logp\_stub}}
\index{logp\_stub@{logp\_stub}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{logp\_stub()}
{\footnotesize\ttfamily void logp\+\_\+stub (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{}]{... }\end{DoxyParamCaption})}



References \textbf{ file()}.

\mbox{\label{group__logging_ga9f015671f0d19116a8240b28742a223e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!map\_subsys@{map\_subsys}}
\index{map\_subsys@{map\_subsys}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{map\_subsys()}
{\footnotesize\ttfamily static int map\+\_\+subsys (\begin{DoxyParamCaption}\item[{int}]{subsys }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ DLGLOBAL}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ log\+\_\+info\+::num\+\_\+cat\+\_\+user}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ subsys}, and \textbf{ subsys\+\_\+lib2index()}.



Referenced by \textbf{ log\+\_\+check\+\_\+level()}, \textbf{ log\+\_\+set\+\_\+category\+\_\+filter()}, and \textbf{ osmo\+\_\+vlogp()}.

\mbox{\label{group__logging_gabbe638cbc231abd48396145cbd3b26aa}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_static\_assert@{osmo\_static\_assert}}
\index{osmo\_static\_assert@{osmo\_static\_assert}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_static\_assert()\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily osmo\+\_\+static\+\_\+assert (\begin{DoxyParamCaption}\item[{\textbf{ \+\_\+\+LOG\+\_\+\+CTX\+\_\+\+COUNT}$<$=}]{ARRAY\+\_\+\+SIZE((struct log\+\_\+context $\ast$) NULL) -\/$>$ctx,  }\item[{enum\+\_\+logging\+\_\+ctx\+\_\+items\+\_\+fit\+\_\+in\+\_\+struct\+\_\+log\+\_\+context}]{ }\end{DoxyParamCaption})}

\mbox{\label{group__logging_gaefa358df727fb5f7e49d69a6c4e88861}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_static\_assert@{osmo\_static\_assert}}
\index{osmo\_static\_assert@{osmo\_static\_assert}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_static\_assert()\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily osmo\+\_\+static\+\_\+assert (\begin{DoxyParamCaption}\item[{\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}$<$=8 $\ast$}]{sizeof((struct log\+\_\+target $\ast$) NULL) -\/$>$filter\+\_\+map,  }\item[{enum\+\_\+logging\+\_\+filters\+\_\+fit\+\_\+in\+\_\+log\+\_\+target\+\_\+filter\+\_\+map}]{ }\end{DoxyParamCaption})}

\mbox{\label{group__logging_gaf1f7a734ffb9978da07d56af7d319760}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_static\_assert@{osmo\_static\_assert}}
\index{osmo\_static\_assert@{osmo\_static\_assert}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_static\_assert()\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily osmo\+\_\+static\+\_\+assert (\begin{DoxyParamCaption}\item[{\textbf{ \+\_\+\+LOG\+\_\+\+FLT\+\_\+\+COUNT}$<$=}]{ARRAY\+\_\+\+SIZE((struct log\+\_\+target $\ast$) NULL) -\/$>$filter\+\_\+data,  }\item[{enum\+\_\+logging\+\_\+filters\+\_\+fit\+\_\+in\+\_\+log\+\_\+target\+\_\+filter\+\_\+data}]{ }\end{DoxyParamCaption})}

\mbox{\label{group__logging_ga607a4b06b2123605f3a3243307aeb7a2}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_vlogp@{osmo\_vlogp}}
\index{osmo\_vlogp@{osmo\_vlogp}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_vlogp()}
{\footnotesize\ttfamily void osmo\+\_\+vlogp (\begin{DoxyParamCaption}\item[{int}]{subsys,  }\item[{int}]{level,  }\item[{const char $\ast$}]{file,  }\item[{int}]{line,  }\item[{int}]{cont,  }\item[{const char $\ast$}]{format,  }\item[{va\+\_\+list}]{ap }\end{DoxyParamCaption})}



vararg version of logging function 


\begin{DoxyParams}[1]{Parameters}
\mbox{\texttt{ in}}  & {\em subsys} & Logging sub-\/system \\
\hline
\mbox{\texttt{ in}}  & {\em level} & Log level \\
\hline
\mbox{\texttt{ in}}  & {\em file} & name of source code file \\
\hline
\mbox{\texttt{ in}}  & {\em cont} & continuation (1) or new line (0) \\
\hline
\mbox{\texttt{ in}}  & {\em format} & format string \\
\hline
\mbox{\texttt{ in}}  & {\em ap} & vararg-\/list containing format string arguments \\
\hline
\end{DoxyParams}


References \textbf{ \+\_\+output()}, \textbf{ log\+\_\+target\+::entry}, \textbf{ file()}, \textbf{ level}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ log\+\_\+cache\+\_\+check()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}, \textbf{ map\+\_\+subsys()}, \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}, \textbf{ log\+\_\+target\+::raw\+\_\+output}, \textbf{ should\+\_\+log\+\_\+to\+\_\+target()}, and \textbf{ subsys}.



Referenced by \textbf{ logp()}, and \textbf{ logp2()}.

\mbox{\label{group__logging_ga995623e2b3946ef56dd69487b0fda241}} 
\index{Osmocom logging framework@{Osmocom logging framework}!should\_log\_to\_target@{should\_log\_to\_target}}
\index{should\_log\_to\_target@{should\_log\_to\_target}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{should\_log\_to\_target()}
{\footnotesize\ttfamily static bool should\+\_\+log\+\_\+to\+\_\+target (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{tar,  }\item[{int}]{subsys,  }\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



References \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ log\+\_\+info\+::filter\+\_\+fn}, \textbf{ log\+\_\+target\+::filter\+\_\+map}, \textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ osmo\+\_\+log\+\_\+info}, and \textbf{ subsys}.



Referenced by \textbf{ log\+\_\+check\+\_\+level()}, and \textbf{ osmo\+\_\+vlogp()}.

\mbox{\label{group__logging_gaf15988bfcaa17f275256dc063a46c737}} 
\index{Osmocom logging framework@{Osmocom logging framework}!subsys\_lib2index@{subsys\_lib2index}}
\index{subsys\_lib2index@{subsys\_lib2index}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{subsys\_lib2index()}
{\footnotesize\ttfamily static int subsys\+\_\+lib2index (\begin{DoxyParamCaption}\item[{int}]{subsys }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ log\+\_\+info\+::num\+\_\+cat\+\_\+user}, \textbf{ osmo\+\_\+log\+\_\+info}, and \textbf{ subsys}.



Referenced by \textbf{ map\+\_\+subsys()}.



\doxysubsection{Variable Documentation}
\mbox{\label{group__logging_gac981d57bb4705996e634c7b1b3bd6a10}} 
\index{Osmocom logging framework@{Osmocom logging framework}!internal\_cat@{internal\_cat}}
\index{internal\_cat@{internal\_cat}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{internal\_cat}
{\footnotesize\ttfamily const struct \textbf{ log\+\_\+info\+\_\+cat} internal\+\_\+cat[\textbf{ OSMO\+\_\+\+NUM\+\_\+\+DLIB}]\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ log\+\_\+init()}.

\mbox{\label{group__logging_ga7d0f79f30da8c4cdf389d1b50ec2f652}} 
\index{Osmocom logging framework@{Osmocom logging framework}!level\_colors@{level\_colors}}
\index{level\_colors@{level\_colors}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{level\_colors}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} level\+\_\+colors[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ LOGL\_DEBUG, OSMO\_LOGCOLOR\_BLUE \},}
\DoxyCodeLine{        \{ LOGL\_INFO, OSMO\_LOGCOLOR\_GREEN \},}
\DoxyCodeLine{        \{ LOGL\_NOTICE, OSMO\_LOGCOLOR\_YELLOW \},}
\DoxyCodeLine{        \{ LOGL\_ERROR, OSMO\_LOGCOLOR\_RED \},}
\DoxyCodeLine{        \{ LOGL\_FATAL, OSMO\_LOGCOLOR\_RED \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ level\+\_\+color()}.

\mbox{\label{group__logging_gadec07e5cb20ac598d5b8dd1f70eefc30}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_context@{log\_context}}
\index{log\_context@{log\_context}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_context}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+context} \textbf{ log\+\_\+context}\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\label{group__logging_ga2df60cc520313b0109e5cf43cc0d1dc8}} 
\index{Osmocom logging framework@{Osmocom logging framework}!log\_level\_lookup\_cache@{log\_level\_lookup\_cache}}
\index{log\_level\_lookup\_cache@{log\_level\_lookup\_cache}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{log\_level\_lookup\_cache}
{\footnotesize\ttfamily volatile uint8\+\_\+t$\ast$ log\+\_\+level\+\_\+lookup\+\_\+cache\hspace{0.3cm}{\ttfamily [static]}}



One global copy that contains the union of log levels for all targets for all categories, used for quick lock free checks of log targets. 



Referenced by \textbf{ log\+\_\+cache\+\_\+check()}, \textbf{ log\+\_\+cache\+\_\+enable()}, \textbf{ log\+\_\+cache\+\_\+update()}, and \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}.

\mbox{\label{group__logging_ga717d59129ea36f1cff741576ca246a46}} 
\index{Osmocom logging framework@{Osmocom logging framework}!logging\_gsmtap\_tid@{logging\_gsmtap\_tid}}
\index{logging\_gsmtap\_tid@{logging\_gsmtap\_tid}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{logging\_gsmtap\_tid}
{\footnotesize\ttfamily \+\_\+\+\_\+thread uint32\+\_\+t logging\+\_\+gsmtap\+\_\+tid\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ \+\_\+gsmtap\+\_\+raw\+\_\+output()}.

\mbox{\label{group__logging_ga467b05a1ee268e6f843da6dca76f432e}} 
\index{Osmocom logging framework@{Osmocom logging framework}!logging\_tid@{logging\_tid}}
\index{logging\_tid@{logging\_tid}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{logging\_tid}
{\footnotesize\ttfamily \+\_\+\+\_\+thread long int logging\+\_\+tid\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ \+\_\+output\+\_\+buf()}.

\mbox{\label{group__logging_gaf6826ad1edc63df058816b245f336872}} 
\index{Osmocom logging framework@{Osmocom logging framework}!loglevel\_strs@{loglevel\_strs}}
\index{loglevel\_strs@{loglevel\_strs}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{loglevel\_strs}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} loglevel\+\_\+strs[$\,$]}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ LOGL\_DEBUG, \textcolor{stringliteral}{"{}DEBUG"{}} \},}
\DoxyCodeLine{        \{ LOGL\_INFO,   \textcolor{stringliteral}{"{}INFO"{}} \},}
\DoxyCodeLine{        \{ LOGL\_NOTICE,       \textcolor{stringliteral}{"{}NOTICE"{}} \},}
\DoxyCodeLine{        \{ LOGL\_ERROR, \textcolor{stringliteral}{"{}ERROR"{}} \},}
\DoxyCodeLine{        \{ LOGL\_FATAL, \textcolor{stringliteral}{"{}FATAL"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \},}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ log\+\_\+level\+\_\+str()}, and \textbf{ log\+\_\+parse\+\_\+level()}.

\mbox{\label{group__logging_ga81945895aa832524afb8edaa9eb366d8}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_log\_info@{osmo\_log\_info}}
\index{osmo\_log\_info@{osmo\_log\_info}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_log\_info\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+info}$\ast$ osmo\+\_\+log\+\_\+info\hspace{0.3cm}{\ttfamily [extern]}}

\mbox{\label{group__logging_ga81945895aa832524afb8edaa9eb366d8}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_log\_info@{osmo\_log\_info}}
\index{osmo\_log\_info@{osmo\_log\_info}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_log\_info\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+info}$\ast$ osmo\+\_\+log\+\_\+info}



Referenced by \textbf{ assert\+\_\+loginfo()}, \textbf{ color()}, \textbf{ log\+\_\+cache\+\_\+enable()}, \textbf{ log\+\_\+cache\+\_\+update\+\_\+all()}, \textbf{ log\+\_\+category\+\_\+name()}, \textbf{ log\+\_\+fini()}, \textbf{ log\+\_\+init()}, \textbf{ log\+\_\+parse\+\_\+category()}, \textbf{ log\+\_\+parse\+\_\+category\+\_\+mask()}, \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ map\+\_\+subsys()}, \textbf{ should\+\_\+log\+\_\+to\+\_\+target()}, and \textbf{ subsys\+\_\+lib2index()}.

\mbox{\label{group__logging_gadd5b9ce5d49453637546dbbfe13ed746}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_log\_tgt\_mutex@{osmo\_log\_tgt\_mutex}}
\index{osmo\_log\_tgt\_mutex@{osmo\_log\_tgt\_mutex}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_log\_tgt\_mutex}
{\footnotesize\ttfamily pthread\+\_\+mutex\+\_\+t osmo\+\_\+log\+\_\+tgt\+\_\+mutex\hspace{0.3cm}{\ttfamily [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 

Referenced by \textbf{ log\+\_\+enable\+\_\+multithread()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock\+\_\+impl()}, and \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock\+\_\+impl()}.

\mbox{\label{group__logging_gaf102d22306d0901165b93e74d5a489a5}} 
\index{Osmocom logging framework@{Osmocom logging framework}!osmo\_log\_tgt\_mutex\_on@{osmo\_log\_tgt\_mutex\_on}}
\index{osmo\_log\_tgt\_mutex\_on@{osmo\_log\_tgt\_mutex\_on}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{osmo\_log\_tgt\_mutex\_on}
{\footnotesize\ttfamily bool osmo\+\_\+log\+\_\+tgt\+\_\+mutex\+\_\+on = false\hspace{0.3cm}{\ttfamily [static]}}



Referenced by \textbf{ log\+\_\+enable\+\_\+multithread()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock\+\_\+impl()}, and \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock\+\_\+impl()}.

\mbox{\label{group__logging_ga637e5fb0ff764b323acb7caef1793dea}} 
\index{Osmocom logging framework@{Osmocom logging framework}!tall\_log\_ctx@{tall\_log\_ctx}}
\index{tall\_log\_ctx@{tall\_log\_ctx}!Osmocom logging framework@{Osmocom logging framework}}
\doxysubsubsection{tall\_log\_ctx}
{\footnotesize\ttfamily void$\ast$ tall\+\_\+log\+\_\+ctx = NULL}



Referenced by \textbf{ log\+\_\+fini()}, \textbf{ log\+\_\+init()}, and \textbf{ log\+\_\+target\+\_\+create()}.

