\doxysection{src/vty/logging\+\_\+vty.c File Reference}
\label{logging__vty_8c}\index{src/vty/logging\_vty.c@{src/vty/logging\_vty.c}}


Configuration of logging from VTY.  


{\ttfamily \#include $<$stdlib.\+h$>$}\newline
{\ttfamily \#include $<$string.\+h$>$}\newline
{\ttfamily \#include \char`\"{}config.\+h\char`\"{}}\newline
{\ttfamily \#include $<$osmocom/core/talloc.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/logging\+\_\+internal.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/utils.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/strrb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/loggingrb.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/gsmtap.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/core/application.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/vty/command.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/vty/buffer.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/vty/vty.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/vty/telnet\+\_\+interface.\+h$>$}\newline
{\ttfamily \#include $<$osmocom/vty/logging.\+h$>$}\newline
\doxysubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \textbf{ LOG\+\_\+\+STR}~\char`\"{}Configure logging sub-\/\textbf{ system\textbackslash{}n}\char`\"{}
\item 
\#define \textbf{ LEVEL\+\_\+\+STR}~\char`\"{}Set the log \textbf{ level} \textbf{ for} a specified \textbf{ category\textbackslash{}n}\char`\"{}
\item 
\#define \textbf{ CATEGORY\+\_\+\+ALL\+\_\+\+STR}~\char`\"{}Deprecated \textbf{ alias} \textbf{ for} \textquotesingle{}force-\/all\textquotesingle{}\textbackslash{}\textbf{ n}\char`\"{}
\item 
\#define \textbf{ FORCE\+\_\+\+ALL\+\_\+\+STR}
\item 
\#define \textbf{ NO\+\_\+\+FORCE\+\_\+\+ALL\+\_\+\+STR}~ \char`\"{}Release any globally forced log \textbf{ level} set with \textquotesingle{}logging \textbf{ level} force-\/all $<$\textbf{ level}$>$\textquotesingle{}\textbackslash{}\textbf{ n}\char`\"{}
\item 
\#define \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+ARGS}~\char`\"{}(debug$\vert$info$\vert$notice$\vert$error$\vert$fatal)\char`\"{}
\item 
\#define \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+STRS}
\item 
\#define \textbf{ EVERYTHING\+\_\+\+STR}~\char`\"{}Deprecated \textbf{ alias} \textbf{ for} \textquotesingle{}no logging \textbf{ level} force-\/all\textquotesingle{}\textbackslash{}\textbf{ n}\char`\"{}
\item 
\#define \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}(\textbf{ vty},  tgt)
\begin{DoxyCompactList}\small\item\em Get tgt with log lock acquired, return and release lock with warning if tgt is not found. \end{DoxyCompactList}\item 
\#define \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}(ret)
\item 
\#define \textbf{ SHOW\+\_\+\+LOG\+\_\+\+STR}~\char`\"{}Show current logging \textbf{ configuration\textbackslash{}n}\char`\"{}
\end{DoxyCompactItemize}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static void \textbf{ \+\_\+vty\+\_\+output} (struct \textbf{ log\+\_\+target} $\ast$tgt, unsigned int \textbf{ level}, const char $\ast$line)
\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ log\+\_\+target\+\_\+create\+\_\+vty} (struct \textbf{ vty} $\ast$\textbf{ vty})
\item 
\textbf{ DEFUN} (enable\+\_\+logging, enable\+\_\+logging\+\_\+cmd, \char`\"{}logging enable\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Enables logging to this \textbf{ vty\textbackslash{}n}\char`\"{})
\item 
struct \textbf{ log\+\_\+target} $\ast$ \textbf{ osmo\+\_\+log\+\_\+vty2tgt} (struct \textbf{ vty} $\ast$\textbf{ vty})
\begin{DoxyCompactList}\small\item\em Get log target associated to VTY console. \end{DoxyCompactList}\item 
\textbf{ DEFUN} (logging\+\_\+fltr\+\_\+all, logging\+\_\+fltr\+\_\+all\+\_\+cmd, \char`\"{}logging filter all (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \textbf{ FILTER\+\_\+\+STR} \char`\"{}Do you want to log all messages?\textbackslash{}\textbf{ n}\char`\"{} \char`\"{}Only print messages matched by other \textbf{ filters\textbackslash{}n}\char`\"{} \char`\"{}Bypass filter and print all \textbf{ messages\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+use\+\_\+clr, logging\+\_\+use\+\_\+clr\+\_\+cmd, \char`\"{}logging \textbf{ color} (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Configure \textbf{ color}-\/printing \textbf{ for} log \textbf{ messages\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t use \textbf{ color} \textbf{ for} printing \textbf{ messages\textbackslash{}n}\char`\"{} \char`\"{}Use \textbf{ color} \textbf{ for} printing \textbf{ messages\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+timestamp, logging\+\_\+prnt\+\_\+timestamp\+\_\+cmd, \char`\"{}logging timestamp (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Configure log message \textbf{ timestamping\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with current \textbf{ timestamp\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+ext\+\_\+timestamp, logging\+\_\+prnt\+\_\+ext\+\_\+timestamp\+\_\+cmd, \char`\"{}logging print extended-\/timestamp (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log message \textbf{ timestamping\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with current timestamp with \textbf{ YYYYMMDDhhmmssnnn\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+tid, logging\+\_\+prnt\+\_\+tid\+\_\+cmd, \char`\"{}logging print thread-\/id (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log message logging Thread \textbf{ ID\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with current Thread \textbf{ ID\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+cat, logging\+\_\+prnt\+\_\+cat\+\_\+cmd, \char`\"{}logging print category (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with category/subsystem \textbf{ name\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+cat\+\_\+hex, logging\+\_\+prnt\+\_\+cat\+\_\+hex\+\_\+cmd, \char`\"{}logging print category-\/hex (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with category/subsystem nr in hex (\textquotesingle{}$<$000b$>$\textquotesingle{})\textbackslash{}\textbf{ n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+level, logging\+\_\+prnt\+\_\+level\+\_\+cmd, \char`\"{}logging print \textbf{ level} (0$\vert$1)\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with the log \textbf{ level} \textbf{ name\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (logging\+\_\+prnt\+\_\+file, logging\+\_\+prnt\+\_\+file\+\_\+cmd, \char`\"{}logging print \textbf{ file} (0$\vert$1$\vert$basename) [last]\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with the source \textbf{ file} and \textbf{ line\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with the source \textbf{ file}\textquotesingle{}s basename (strip leading paths) and \textbf{ line\textbackslash{}n}\char`\"{} \char`\"{}Log source \textbf{ file} info at the end of a log line. If omitted, log source \textbf{ file} info just\char`\"{} \char`\"{} before the log \textbf{ text.\textbackslash{}n}\char`\"{})
\item 
static void \textbf{ add\+\_\+category\+\_\+strings} (char $\ast$$\ast$cmd\+\_\+str\+\_\+p, char $\ast$$\ast$doc\+\_\+str\+\_\+p, const struct \textbf{ log\+\_\+info} $\ast$categories)
\item 
static void \textbf{ gen\+\_\+logging\+\_\+level\+\_\+cmd\+\_\+strs} (struct \textbf{ cmd\+\_\+element} $\ast$cmd, const char $\ast$level\+\_\+args, const char $\ast$level\+\_\+strs)
\item 
\textbf{ DEFUN} (logging\+\_\+level, logging\+\_\+level\+\_\+cmd, NULL, NULL)
\item 
\textbf{ DEFUN} (logging\+\_\+level\+\_\+set\+\_\+all, logging\+\_\+level\+\_\+set\+\_\+all\+\_\+cmd, \char`\"{}logging \textbf{ level} set-\/all \char`\"{} LOG\+\_\+\+LEVEL\+\_\+\+ARGS, \textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \char`\"{}Once-\/off set all categories to the given log level. There is no single command\char`\"{} \char`\"{} to take back these changes -\/-\/ each category is set to the given \textbf{ level}, \textbf{ period.\textbackslash{}n}\char`\"{} LOG\+\_\+\+LEVEL\+\_\+\+STRS)
\item 
\textbf{ DEFUN\+\_\+\+DEPRECATED} (deprecated\+\_\+logging\+\_\+level\+\_\+everything, deprecated\+\_\+logging\+\_\+level\+\_\+everything\+\_\+cmd, NULL, NULL)
\item 
\textbf{ DEFUN} (logging\+\_\+level\+\_\+force\+\_\+all, logging\+\_\+level\+\_\+force\+\_\+all\+\_\+cmd, \char`\"{}logging \textbf{ level} force-\/all \char`\"{} LOG\+\_\+\+LEVEL\+\_\+\+ARGS, \textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \textbf{ FORCE\+\_\+\+ALL\+\_\+\+STR} \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+STRS})
\item 
\textbf{ DEFUN} (no\+\_\+logging\+\_\+level\+\_\+force\+\_\+all, no\+\_\+logging\+\_\+level\+\_\+force\+\_\+all\+\_\+cmd, \char`\"{}no logging \textbf{ level} force-\/all\char`\"{}, NO\+\_\+\+STR \textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \textbf{ NO\+\_\+\+FORCE\+\_\+\+ALL\+\_\+\+STR})
\item 
\textbf{ ALIAS\+\_\+\+DEPRECATED} (logging\+\_\+level\+\_\+force\+\_\+all, deprecated\+\_\+logging\+\_\+level\+\_\+all\+\_\+cmd, \char`\"{}logging \textbf{ level} all \char`\"{} LOG\+\_\+\+LEVEL\+\_\+\+ARGS, \textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \textbf{ CATEGORY\+\_\+\+ALL\+\_\+\+STR} \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+STRS})
\item 
\textbf{ ALIAS\+\_\+\+DEPRECATED} (no\+\_\+logging\+\_\+level\+\_\+force\+\_\+all, deprecated\+\_\+logging\+\_\+level\+\_\+all\+\_\+everything\+\_\+cmd, \char`\"{}logging \textbf{ level} all everything\char`\"{}, LOGGING\+\_\+\+STR \textbf{ LEVEL\+\_\+\+STR} \textbf{ CATEGORY\+\_\+\+ALL\+\_\+\+STR} \textbf{ EVERYTHING\+\_\+\+STR})
\item 
\textbf{ DEFUN} (logging\+\_\+set\+\_\+category\+\_\+mask, logging\+\_\+set\+\_\+category\+\_\+mask\+\_\+cmd, \char`\"{}logging set-\/log-\/mask MASK\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Set the logmask of this logging \textbf{ target\textbackslash{}n}\char`\"{} \char`\"{}List of logging categories to log, e.\+g. \textquotesingle{}abc\+:mno\+:xyz\textquotesingle{}. Available log categories depend on the specific\char`\"{} \char`\"{} application, refer to the \textquotesingle{}logging \textbf{ level}\textquotesingle{} command. Optionally add individual log levels like\char`\"{} \char`\"{} \textquotesingle{}abc,1\+:mno,3\+:xyz,5\textquotesingle{}, where the \textbf{ level} numbers are\char`\"{} \char`\"{} \char`\"{} OSMO\+\_\+\+STRINGIFY(\textbf{ LOGL\+\_\+\+DEBUG}) \char`\"{}=\char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY\+\_\+\+VAL}(\textbf{ LOGL\+\_\+\+DEBUG}) \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY}(\textbf{ LOGL\+\_\+\+INFO}) \char`\"{}=\char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY\+\_\+\+VAL}(\textbf{ LOGL\+\_\+\+INFO}) \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY}(\textbf{ LOGL\+\_\+\+NOTICE}) \char`\"{}=\char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY\+\_\+\+VAL}(\textbf{ LOGL\+\_\+\+NOTICE}) \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY}(\textbf{ LOGL\+\_\+\+ERROR}) \char`\"{}=\char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY\+\_\+\+VAL}(\textbf{ LOGL\+\_\+\+ERROR}) \char`\"{} \char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY}(\textbf{ LOGL\+\_\+\+FATAL}) \char`\"{}=\char`\"{} \textbf{ OSMO\+\_\+\+STRINGIFY\+\_\+\+VAL}(\textbf{ LOGL\+\_\+\+FATAL}) \char`\"{}\textbackslash{}n\char`\"{})
\item 
\textbf{ ALIAS\+\_\+\+DEPRECATED} (logging\+\_\+set\+\_\+category\+\_\+mask, logging\+\_\+set\+\_\+category\+\_\+mask\+\_\+old\+\_\+cmd, \char`\"{}logging set log mask MASK\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Decide which categories to \textbf{ output.\textbackslash{}n}\char`\"{} \char`\"{}Log \textbf{ commands\textbackslash{}n}\char`\"{} \char`\"{}Mask \textbf{ commands\textbackslash{}n}\char`\"{} \char`\"{}\textquotesingle{}set log mask\textquotesingle{} is deprecated, please refer to the docs of \textquotesingle{}set-\/log-\/mask\textquotesingle{} \textbf{ instead\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (diable\+\_\+logging, disable\+\_\+logging\+\_\+cmd, \char`\"{}logging disable\char`\"{}, LOGGING\+\_\+\+STR \char`\"{}Disables logging to this \textbf{ vty\textbackslash{}n}\char`\"{})
\item 
static void \textbf{ vty\+\_\+print\+\_\+logtarget} (struct \textbf{ vty} $\ast$\textbf{ vty}, const struct \textbf{ log\+\_\+info} $\ast$info, const struct \textbf{ log\+\_\+target} $\ast$tgt)
\item 
\textbf{ DEFUN} (show\+\_\+logging\+\_\+vty, show\+\_\+logging\+\_\+vty\+\_\+cmd, \char`\"{}show logging \textbf{ vty}\char`\"{}, SHOW\+\_\+\+STR \textbf{ SHOW\+\_\+\+LOG\+\_\+\+STR} \char`\"{}Show current logging configuration \textbf{ for} this \textbf{ vty\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (show\+\_\+alarms, show\+\_\+alarms\+\_\+cmd, \char`\"{}show alarms\char`\"{}, SHOW\+\_\+\+STR \textbf{ SHOW\+\_\+\+LOG\+\_\+\+STR} \char`\"{}Show the contents of the logging \textbf{ ringbuffer\textbackslash{}n}\char`\"{})
\item 
\textbf{ g\+DEFUN} (cfg\+\_\+description, \textbf{ cfg\+\_\+description\+\_\+cmd}, \char`\"{}description .TEXT\char`\"{}, \char`\"{}Save human-\/readable description of the \textbf{ object\textbackslash{}n}\char`\"{} \char`\"{}Text until the end of the \textbf{ line\textbackslash{}n}\char`\"{})
\item 
\textbf{ g\+DEFUN} (cfg\+\_\+no\+\_\+description, \textbf{ cfg\+\_\+no\+\_\+description\+\_\+cmd}, \char`\"{}no description\char`\"{}, NO\+\_\+\+STR \char`\"{}Remove description of the \textbf{ object\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+log\+\_\+systemd\+\_\+journal, cfg\+\_\+log\+\_\+systemd\+\_\+journal\+\_\+cmd, \char`\"{}log systemd-\/journal [raw]\char`\"{}, LOG\+\_\+\+STR \char`\"{}Logging to systemd-\/\textbf{ journal\textbackslash{}n}\char`\"{} \char`\"{}Offload rendering of the meta information (location, category) to \textbf{ systemd\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+no\+\_\+log\+\_\+systemd\+\_\+journal, cfg\+\_\+no\+\_\+log\+\_\+systemd\+\_\+journal\+\_\+cmd, \char`\"{}no log systemd-\/journal\char`\"{}, NO\+\_\+\+STR \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging to systemd-\/\textbf{ journal\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+log\+\_\+gsmtap, cfg\+\_\+log\+\_\+gsmtap\+\_\+cmd, \char`\"{}log gsmtap [HOSTNAME]\char`\"{}, LOG\+\_\+\+STR \char`\"{}Logging via \textbf{ GSMTAP\textbackslash{}n}\char`\"{} \char`\"{}Host \textbf{ name} to send the GSMTAP logging to (UDP port 4729)\textbackslash{}\textbf{ n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+no\+\_\+log\+\_\+gsmtap, cfg\+\_\+no\+\_\+log\+\_\+gsmtap\+\_\+cmd, \char`\"{}no log gsmtap [HOSTNAME]\char`\"{}, NO\+\_\+\+STR \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging via \textbf{ GSMTAP\textbackslash{}n}\char`\"{} \char`\"{}Host \textbf{ name} to send the GSMTAP logging to (UDP port 4729)\textbackslash{}\textbf{ n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+log\+\_\+stderr, cfg\+\_\+log\+\_\+stderr\+\_\+cmd, \char`\"{}log stderr [blocking-\/io]\char`\"{}, LOG\+\_\+\+STR \char`\"{}Logging via STDERR of the \textbf{ process\textbackslash{}n}\char`\"{} \char`\"{}Use blocking, synchronous I/\textbf{ O\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+no\+\_\+log\+\_\+stderr, cfg\+\_\+no\+\_\+log\+\_\+stderr\+\_\+cmd, \char`\"{}no log stderr\char`\"{}, NO\+\_\+\+STR \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging via STDERR of the \textbf{ process\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+log\+\_\+file, cfg\+\_\+log\+\_\+file\+\_\+cmd, \char`\"{}log \textbf{ file} FILENAME [blocking-\/io]\char`\"{}, LOG\+\_\+\+STR \char`\"{}Logging to text \textbf{ file\textbackslash{}n}\char`\"{} \char`\"{}\textbf{ Filename\textbackslash{}n}\char`\"{} \char`\"{}Use blocking, synchronous I/\textbf{ O\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+no\+\_\+log\+\_\+file, cfg\+\_\+no\+\_\+log\+\_\+file\+\_\+cmd, \char`\"{}no log \textbf{ file} FILENAME\char`\"{}, NO\+\_\+\+STR \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging to text \textbf{ file\textbackslash{}n}\char`\"{} \char`\"{}\textbf{ Filename\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+log\+\_\+alarms, cfg\+\_\+log\+\_\+alarms\+\_\+cmd, \char`\"{}log alarms $<$2-\/32700$>$\char`\"{}, LOG\+\_\+\+STR \char`\"{}Logging alarms to \textbf{ osmo\+\_\+strrb\textbackslash{}n}\char`\"{} \char`\"{}Maximum number of messages to \textbf{ log\textbackslash{}n}\char`\"{})
\item 
\textbf{ DEFUN} (cfg\+\_\+no\+\_\+log\+\_\+alarms, cfg\+\_\+no\+\_\+log\+\_\+alarms\+\_\+cmd, \char`\"{}no log alarms\char`\"{}, NO\+\_\+\+STR \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging alarms to \textbf{ osmo\+\_\+strrb\textbackslash{}n}\char`\"{})
\item 
static int \textbf{ config\+\_\+write\+\_\+log\+\_\+single} (struct \textbf{ vty} $\ast$\textbf{ vty}, struct \textbf{ log\+\_\+target} $\ast$tgt)
\item 
static int \textbf{ config\+\_\+write\+\_\+log} (struct \textbf{ vty} $\ast$\textbf{ vty})
\item 
static int \textbf{ log\+\_\+deprecated\+\_\+func} (struct \textbf{ cmd\+\_\+element} $\ast$cmd, struct \textbf{ vty} $\ast$\textbf{ vty}, int \textbf{ argc}, const char $\ast$\textbf{ argv}[$\,$])
\item 
void \textbf{ logging\+\_\+vty\+\_\+add\+\_\+deprecated\+\_\+subsys} (void $\ast$ctx, const char $\ast$\textbf{ name})
\item 
\textbf{ DEFUN} (vty\+\_\+logp, vty\+\_\+logp\+\_\+cmd, NULL, NULL)
\item 
static void \textbf{ gen\+\_\+vty\+\_\+logp\+\_\+cmd\+\_\+strs} (struct \textbf{ cmd\+\_\+element} $\ast$cmd)
\item 
void \textbf{ logging\+\_\+vty\+\_\+add\+\_\+cmds} (void)
\begin{DoxyCompactList}\small\item\em Register logging related commands to the VTY. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
static const struct \textbf{ value\+\_\+string} \textbf{ logging\+\_\+print\+\_\+file\+\_\+args} [$\,$]
\item 
struct \textbf{ cmd\+\_\+node} \textbf{ cfg\+\_\+log\+\_\+node}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Configuration of logging from VTY. 

This module implements
\begin{DoxyItemize}
\item functions that permit configuration of the libosmocore logging framework from VTY commands in the configure -\/$>$ logging node.
\item functions that permit logging {\itshape to} a VTY session. Basically each VTY session gets its own log target, with configurable per-\/subsystem log levels. This is performed internally via the \doxyref{log\+\_\+target\+\_\+create\+\_\+vty}{p.}{logging__vty_8c_a89ca200449e85d92349155a5de0d9176} function.
\end{DoxyItemize}

You have to call \doxyref{logging\+\_\+vty\+\_\+add\+\_\+cmds}{p.}{logging__vty_8c_a0660beaeb27dcca883acdf90434e0925} from your application once to enable both of the above. 

\doxysubsection{Macro Definition Documentation}
\mbox{\label{logging__vty_8c_ae050824589cc39f5b596f64cb748303e}} 
\index{logging\_vty.c@{logging\_vty.c}!ACQUIRE\_VTY\_LOG\_TGT\_WITH\_LOCK@{ACQUIRE\_VTY\_LOG\_TGT\_WITH\_LOCK}}
\index{ACQUIRE\_VTY\_LOG\_TGT\_WITH\_LOCK@{ACQUIRE\_VTY\_LOG\_TGT\_WITH\_LOCK}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{ACQUIRE\_VTY\_LOG\_TGT\_WITH\_LOCK}
{\footnotesize\ttfamily \#define ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK(\begin{DoxyParamCaption}\item[{}]{\textbf{ vty},  }\item[{}]{tgt }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{                log\_tgt\_mutex\_lock(); \(\backslash\)}
\DoxyCodeLine{                tgt = osmo\_log\_vty2tgt(vty); \(\backslash\)}
\DoxyCodeLine{                if (!(tgt)) \{ \(\backslash\)}
\DoxyCodeLine{                        log\_tgt\_mutex\_unlock(); \(\backslash\)}
\DoxyCodeLine{                        return CMD\_WARNING; \(\backslash\)}
\DoxyCodeLine{                \} \(\backslash\)}
\DoxyCodeLine{        \} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}


Get tgt with log lock acquired, return and release lock with warning if tgt is not found. 

Lock must be released later with \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock()}. \mbox{\label{logging__vty_8c_a30cfda8e87c14d1145ad43e5b71d96b5}} 
\index{logging\_vty.c@{logging\_vty.c}!CATEGORY\_ALL\_STR@{CATEGORY\_ALL\_STR}}
\index{CATEGORY\_ALL\_STR@{CATEGORY\_ALL\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{CATEGORY\_ALL\_STR}
{\footnotesize\ttfamily \#define CATEGORY\+\_\+\+ALL\+\_\+\+STR~\char`\"{}Deprecated \textbf{ alias} \textbf{ for} \textquotesingle{}force-\/all\textquotesingle{}\textbackslash{}\textbf{ n}\char`\"{}}

\mbox{\label{logging__vty_8c_a16b17d3c68db8c94679d77706d62842c}} 
\index{logging\_vty.c@{logging\_vty.c}!EVERYTHING\_STR@{EVERYTHING\_STR}}
\index{EVERYTHING\_STR@{EVERYTHING\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{EVERYTHING\_STR}
{\footnotesize\ttfamily \#define EVERYTHING\+\_\+\+STR~\char`\"{}Deprecated \textbf{ alias} \textbf{ for} \textquotesingle{}no logging \textbf{ level} force-\/all\textquotesingle{}\textbackslash{}\textbf{ n}\char`\"{}}

\mbox{\label{logging__vty_8c_a540ccd996c4becfd1dfc2ef0b4103fae}} 
\index{logging\_vty.c@{logging\_vty.c}!FORCE\_ALL\_STR@{FORCE\_ALL\_STR}}
\index{FORCE\_ALL\_STR@{FORCE\_ALL\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{FORCE\_ALL\_STR}
{\footnotesize\ttfamily \#define FORCE\+\_\+\+ALL\+\_\+\+STR}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Globally force all logging categories to a specific level. This is released by the"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{} 'no logging level force-\/all' command. Note: any 'logging level <category> <level>'"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{} commands will have no visible effect after this, until the forced level is released.\(\backslash\)n"{}}}

\end{DoxyCode}
\mbox{\label{logging__vty_8c_afcf56905ff88443012614978a363b7b1}} 
\index{logging\_vty.c@{logging\_vty.c}!LEVEL\_STR@{LEVEL\_STR}}
\index{LEVEL\_STR@{LEVEL\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{LEVEL\_STR}
{\footnotesize\ttfamily \#define LEVEL\+\_\+\+STR~\char`\"{}Set the log \textbf{ level} \textbf{ for} a specified \textbf{ category\textbackslash{}n}\char`\"{}}

\mbox{\label{logging__vty_8c_a630e44de78da7d8b3a08bd92a2393f0f}} 
\index{logging\_vty.c@{logging\_vty.c}!LOG\_LEVEL\_ARGS@{LOG\_LEVEL\_ARGS}}
\index{LOG\_LEVEL\_ARGS@{LOG\_LEVEL\_ARGS}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{LOG\_LEVEL\_ARGS}
{\footnotesize\ttfamily \#define LOG\+\_\+\+LEVEL\+\_\+\+ARGS~\char`\"{}(debug$\vert$info$\vert$notice$\vert$error$\vert$fatal)\char`\"{}}

\mbox{\label{logging__vty_8c_ad071b145049c96b389efacaa7d20ea7e}} 
\index{logging\_vty.c@{logging\_vty.c}!LOG\_LEVEL\_STRS@{LOG\_LEVEL\_STRS}}
\index{LOG\_LEVEL\_STRS@{LOG\_LEVEL\_STRS}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{LOG\_LEVEL\_STRS}
{\footnotesize\ttfamily \#define LOG\+\_\+\+LEVEL\+\_\+\+STRS}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Log debug messages and higher levels\(\backslash\)n"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Log informational messages and higher levels\(\backslash\)n"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Log noticeable messages and higher levels\(\backslash\)n"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Log error messages and higher levels\(\backslash\)n"{}} \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}Log only fatal messages\(\backslash\)n"{}}}

\end{DoxyCode}
\mbox{\label{logging__vty_8c_a7ecc4c9f82b290190e00da4af731b939}} 
\index{logging\_vty.c@{logging\_vty.c}!LOG\_STR@{LOG\_STR}}
\index{LOG\_STR@{LOG\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{LOG\_STR}
{\footnotesize\ttfamily \#define LOG\+\_\+\+STR~\char`\"{}Configure logging sub-\/\textbf{ system\textbackslash{}n}\char`\"{}}

\mbox{\label{logging__vty_8c_a9d7a7ce2af8a29f73772c5cd49e780c5}} 
\index{logging\_vty.c@{logging\_vty.c}!NO\_FORCE\_ALL\_STR@{NO\_FORCE\_ALL\_STR}}
\index{NO\_FORCE\_ALL\_STR@{NO\_FORCE\_ALL\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{NO\_FORCE\_ALL\_STR}
{\footnotesize\ttfamily \#define NO\+\_\+\+FORCE\+\_\+\+ALL\+\_\+\+STR~ \char`\"{}Release any globally forced log \textbf{ level} set with \textquotesingle{}logging \textbf{ level} force-\/all $<$\textbf{ level}$>$\textquotesingle{}\textbackslash{}\textbf{ n}\char`\"{}}

\mbox{\label{logging__vty_8c_a88382584acb3b538a29fa3e01fee6533}} 
\index{logging\_vty.c@{logging\_vty.c}!RET\_WITH\_UNLOCK@{RET\_WITH\_UNLOCK}}
\index{RET\_WITH\_UNLOCK@{RET\_WITH\_UNLOCK}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{RET\_WITH\_UNLOCK}
{\footnotesize\ttfamily \#define RET\+\_\+\+WITH\+\_\+\+UNLOCK(\begin{DoxyParamCaption}\item[{}]{ret }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{        \textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{                log\_tgt\_mutex\_unlock(); \(\backslash\)}
\DoxyCodeLine{                return (ret); \(\backslash\)}
\DoxyCodeLine{        \} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}
\mbox{\label{logging__vty_8c_a2c4331a3cd9a398a691cce95799fb1e5}} 
\index{logging\_vty.c@{logging\_vty.c}!SHOW\_LOG\_STR@{SHOW\_LOG\_STR}}
\index{SHOW\_LOG\_STR@{SHOW\_LOG\_STR}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{SHOW\_LOG\_STR}
{\footnotesize\ttfamily \#define SHOW\+\_\+\+LOG\+\_\+\+STR~\char`\"{}Show current logging \textbf{ configuration\textbackslash{}n}\char`\"{}}



\doxysubsection{Function Documentation}
\mbox{\label{logging__vty_8c_ad3e901c9dce43004710a246d0759a3d1}} 
\index{logging\_vty.c@{logging\_vty.c}!\_vty\_output@{\_vty\_output}}
\index{\_vty\_output@{\_vty\_output}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{\_vty\_output()}
{\footnotesize\ttfamily static void \+\_\+vty\+\_\+output (\begin{DoxyParamCaption}\item[{struct \textbf{ log\+\_\+target} $\ast$}]{tgt,  }\item[{unsigned int}]{level,  }\item[{const char $\ast$}]{line }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ log\+\_\+target\+::tgt\+\_\+vty}, \textbf{ log\+\_\+target\+::vty}, and \textbf{ vty\+\_\+out()}.



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

\mbox{\label{logging__vty_8c_ac1fc46d96219b50609e2c49c13123038}} 
\index{logging\_vty.c@{logging\_vty.c}!add\_category\_strings@{add\_category\_strings}}
\index{add\_category\_strings@{add\_category\_strings}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{add\_category\_strings()}
{\footnotesize\ttfamily static void add\+\_\+category\+\_\+strings (\begin{DoxyParamCaption}\item[{char $\ast$$\ast$}]{cmd\+\_\+str\+\_\+p,  }\item[{char $\ast$$\ast$}]{doc\+\_\+str\+\_\+p,  }\item[{const struct \textbf{ log\+\_\+info} $\ast$}]{categories }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ log\+\_\+target\+::categories}, \textbf{ osmo\+\_\+str\+\_\+tolower\+\_\+buf()}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, and \textbf{ tall\+\_\+log\+\_\+ctx}.



Referenced by \textbf{ gen\+\_\+logging\+\_\+level\+\_\+cmd\+\_\+strs()}, and \textbf{ gen\+\_\+vty\+\_\+logp\+\_\+cmd\+\_\+strs()}.

\mbox{\label{logging__vty_8c_ab429c5dcaf7c6bc62f3e0045bd29665e}} 
\index{logging\_vty.c@{logging\_vty.c}!ALIAS\_DEPRECATED@{ALIAS\_DEPRECATED}}
\index{ALIAS\_DEPRECATED@{ALIAS\_DEPRECATED}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{ALIAS\_DEPRECATED()\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily ALIAS\+\_\+\+DEPRECATED (\begin{DoxyParamCaption}\item[{logging\+\_\+level\+\_\+force\+\_\+all}]{,  }\item[{deprecated\+\_\+logging\+\_\+level\+\_\+all\+\_\+cmd}]{,  }\item[{\char`\"{}logging \textbf{ level} all \char`\"{}}]{LOG\+\_\+\+LEVEL\+\_\+\+ARGS,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \textbf{ CATEGORY\+\_\+\+ALL\+\_\+\+STR}}]{LOG\+\_\+\+LEVEL\+\_\+\+STRS }\end{DoxyParamCaption})}

\mbox{\label{logging__vty_8c_a2e144e5b3f1ff62f6a468917f33ec9b5}} 
\index{logging\_vty.c@{logging\_vty.c}!ALIAS\_DEPRECATED@{ALIAS\_DEPRECATED}}
\index{ALIAS\_DEPRECATED@{ALIAS\_DEPRECATED}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{ALIAS\_DEPRECATED()\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily ALIAS\+\_\+\+DEPRECATED (\begin{DoxyParamCaption}\item[{logging\+\_\+set\+\_\+category\+\_\+mask}]{,  }\item[{logging\+\_\+set\+\_\+category\+\_\+mask\+\_\+old\+\_\+cmd}]{,  }\item[{\char`\"{}logging set log mask MASK\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Decide which categories to \textbf{ output.\textbackslash{}n}\char`\"{} \char`\"{}Log \textbf{ commands\textbackslash{}n}\char`\"{} \char`\"{}Mask \textbf{ commands\textbackslash{}n}\char`\"{} \char`\"{}\textquotesingle{}set log mask\textquotesingle{} is}]{deprecated,  }\item[{please refer to the docs of \textquotesingle{}set-\/log-\/mask\textquotesingle{} \textbf{ instead\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}

\mbox{\label{logging__vty_8c_a7b988a77336ad1d7e4e8474412f8c051}} 
\index{logging\_vty.c@{logging\_vty.c}!ALIAS\_DEPRECATED@{ALIAS\_DEPRECATED}}
\index{ALIAS\_DEPRECATED@{ALIAS\_DEPRECATED}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{ALIAS\_DEPRECATED()\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily ALIAS\+\_\+\+DEPRECATED (\begin{DoxyParamCaption}\item[{no\+\_\+logging\+\_\+level\+\_\+force\+\_\+all}]{,  }\item[{deprecated\+\_\+logging\+\_\+level\+\_\+all\+\_\+everything\+\_\+cmd}]{,  }\item[{\char`\"{}logging \textbf{ level} all everything\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \textbf{ CATEGORY\+\_\+\+ALL\+\_\+\+STR}}]{EVERYTHING\+\_\+\+STR }\end{DoxyParamCaption})}

\mbox{\label{logging__vty_8c_a9b61c313b50dd9ad16bef1e86bbef5de}} 
\index{logging\_vty.c@{logging\_vty.c}!config\_write\_log@{config\_write\_log}}
\index{config\_write\_log@{config\_write\_log}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{config\_write\_log()}
{\footnotesize\ttfamily static int config\+\_\+write\+\_\+log (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ config\+\_\+write\+\_\+log\+\_\+single()}, \textbf{ entry}, \textbf{ vty\+::index}, \textbf{ llist\+\_\+for\+\_\+each\+\_\+entry}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+unlock}, and \textbf{ osmo\+\_\+log\+\_\+target\+\_\+list}.



Referenced by \textbf{ logging\+\_\+vty\+\_\+add\+\_\+cmds()}.

\mbox{\label{logging__vty_8c_aa073401f071603d0439063beca5372c0}} 
\index{logging\_vty.c@{logging\_vty.c}!config\_write\_log\_single@{config\_write\_log\_single}}
\index{config\_write\_log\_single@{config\_write\_log\_single}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{config\_write\_log\_single()}
{\footnotesize\ttfamily static int config\+\_\+write\+\_\+log\+\_\+single (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{struct \textbf{ log\+\_\+target} $\ast$}]{tgt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+target\+::facility}, \textbf{ log\+\_\+target\+::filter\+\_\+map}, \textbf{ log\+\_\+target\+::fname}, \textbf{ get\+\_\+value\+\_\+string()}, \textbf{ get\+\_\+value\+\_\+string\+\_\+or\+\_\+null()}, \textbf{ log\+\_\+target\+::hostname}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+LINE\+\_\+\+END}, \textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL}, \textbf{ log\+\_\+target\+\_\+rb\+\_\+avail\+\_\+size()}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STRRB}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSLOG}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSTEMD}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+VTY}, \textbf{ logging\+\_\+print\+\_\+file\+\_\+args}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ loglevel\+\_\+strs}, \textbf{ log\+\_\+info\+\_\+cat\+::name}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ osmo\+\_\+str\+\_\+tolower\+\_\+buf()}, \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{ log\+\_\+target\+::raw}, \textbf{ log\+\_\+info\+::save\+\_\+fn}, \textbf{ log\+\_\+target\+::sd\+\_\+journal}, \textbf{ log\+\_\+target\+::tgt\+\_\+file}, \textbf{ log\+\_\+target\+::tgt\+\_\+gsmtap}, \textbf{ log\+\_\+target\+::tgt\+\_\+syslog}, \textbf{ log\+\_\+target\+::type}, \textbf{ log\+\_\+target\+::use\+\_\+color}, \textbf{ VTY\+\_\+\+NEWLINE}, \textbf{ vty\+\_\+out()}, and \textbf{ log\+\_\+target\+::wqueue}.



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

\mbox{\label{logging__vty_8c_a64eae9c8d69779f9482b3d78bced3eca}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [1/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+log\+\_\+alarms}]{,  }\item[{cfg\+\_\+log\+\_\+alarms\+\_\+cmd}]{,  }\item[{\char`\"{}log alarms $<$2-\/32700$>$\char`\"{}}]{,  }\item[{\textbf{ LOG\+\_\+\+STR} \char`\"{}Logging alarms to \textbf{ osmo\+\_\+strrb\textbackslash{}n}\char`\"{} \char`\"{}Maximum number of messages to \textbf{ log\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argv}, \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ vty\+::index}, \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+rb()}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STRRB}, \textbf{ vty\+::node}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a05ee0e3ec7b2acd55695e5e896c34ff9}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [2/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+log\+\_\+file}]{,  }\item[{cfg\+\_\+log\+\_\+file\+\_\+cmd}]{,  }\item[{\char`\"{}log \textbf{ file} FILENAME \char`\"{}}]{[blocking-\/io],  }\item[{\textbf{ LOG\+\_\+\+STR} \char`\"{}Logging to text \textbf{ file\textbackslash{}n}\char`\"{} \char`\"{}\textbf{ Filename\textbackslash{}n}\char`\"{} \char`\"{}Use}]{blocking,  }\item[{synchronous I/\textbf{ O\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ argv}, \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+::fname}, \textbf{ vty\+::index}, \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+file()}, \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+stream()}, \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+wqueue()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ vty\+::node}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_ac8c81f18992f178eacf08e33655ee7b7}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [3/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+log\+\_\+gsmtap}]{,  }\item[{cfg\+\_\+log\+\_\+gsmtap\+\_\+cmd}]{,  }\item[{\char`\"{}log gsmtap \char`\"{}}]{[\+HOSTNAME],  }\item[{\textbf{ LOG\+\_\+\+STR} \char`\"{}Logging via \textbf{ GSMTAP\textbackslash{}n}\char`\"{} \char`\"{}Host \textbf{ name} to send the GSMTAP logging to (UDP port 4729)\textbackslash{}\textbf{ n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ host\+::app\+\_\+info}, \textbf{ argc}, \textbf{ argv}, \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ GSMTAP\+\_\+\+UDP\+\_\+\+PORT}, \textbf{ log\+\_\+target\+::hostname}, \textbf{ vty\+::index}, \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+gsmtap()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}, \textbf{ vty\+\_\+app\+\_\+info\+::name}, \textbf{ vty\+::node}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a9439ca9ee0975bf2c6e80962f1ce27ae}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [4/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+log\+\_\+stderr}]{,  }\item[{cfg\+\_\+log\+\_\+stderr\+\_\+cmd}]{,  }\item[{\char`\"{}log stderr \char`\"{}}]{[blocking-\/io],  }\item[{\textbf{ LOG\+\_\+\+STR} \char`\"{}Logging via STDERR of the \textbf{ process\textbackslash{}n}\char`\"{} \char`\"{}Use}]{blocking,  }\item[{synchronous I/\textbf{ O\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ argv}, \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ vty\+::index}, \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+stderr()}, \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+stream()}, \textbf{ log\+\_\+target\+\_\+file\+\_\+switch\+\_\+to\+\_\+wqueue()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ vty\+::node}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_af2f355ed2a408e210b8a5daa9575836a}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [5/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+log\+\_\+systemd\+\_\+journal}]{,  }\item[{cfg\+\_\+log\+\_\+systemd\+\_\+journal\+\_\+cmd}]{,  }\item[{\char`\"{}log systemd-\/journal \char`\"{}}]{[raw],  }\item[{\textbf{ LOG\+\_\+\+STR} \char`\"{}Logging to systemd-\/\textbf{ journal\textbackslash{}n}\char`\"{} \char`\"{}Offload rendering of the meta information (location, category) to \textbf{ systemd\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ vty\+::index}, \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+systemd()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+target\+\_\+systemd\+\_\+set\+\_\+raw()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSTEMD}, \textbf{ vty\+::node}, \textbf{ log\+\_\+target\+::raw}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ log\+\_\+target\+::sd\+\_\+journal}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a8c38bc668e21c950b3f0811e77689679}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [6/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+no\+\_\+log\+\_\+alarms}]{,  }\item[{cfg\+\_\+no\+\_\+log\+\_\+alarms\+\_\+cmd}]{,  }\item[{\char`\"{}no log alarms\char`\"{}}]{,  }\item[{\textbf{ NO\+\_\+\+STR} \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging alarms to \textbf{ osmo\+\_\+strrb\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STRRB}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a5e2d14b076704fe859fbf234da23577c}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [7/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+no\+\_\+log\+\_\+file}]{,  }\item[{cfg\+\_\+no\+\_\+log\+\_\+file\+\_\+cmd}]{,  }\item[{\char`\"{}no log \textbf{ file} FILENAME\char`\"{}}]{,  }\item[{\textbf{ NO\+\_\+\+STR} \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging to text \textbf{ file\textbackslash{}n}\char`\"{} \char`\"{}\textbf{ Filename\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+::fname}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+FILE}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_aea4bf0e718cd8ea50f09f099db76a45d}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [8/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+no\+\_\+log\+\_\+gsmtap}]{,  }\item[{cfg\+\_\+no\+\_\+log\+\_\+gsmtap\+\_\+cmd}]{,  }\item[{\char`\"{}no log gsmtap \char`\"{}}]{[\+HOSTNAME],  }\item[{\textbf{ NO\+\_\+\+STR} \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging via \textbf{ GSMTAP\textbackslash{}n}\char`\"{} \char`\"{}Host \textbf{ name} to send the GSMTAP logging to (UDP port 4729)\textbackslash{}\textbf{ n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+::hostname}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+GSMTAP}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_ae69a4a2ea1845ba8a49eca3a64d11202}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [9/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+no\+\_\+log\+\_\+stderr}]{,  }\item[{cfg\+\_\+no\+\_\+log\+\_\+stderr\+\_\+cmd}]{,  }\item[{\char`\"{}no log stderr\char`\"{}}]{,  }\item[{\textbf{ NO\+\_\+\+STR} \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging via STDERR of the \textbf{ process\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STDERR}, \textbf{ osmo\+\_\+stderr\+\_\+target}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a6fa00be55c0fe3213d88369df4425f8f}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [10/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+no\+\_\+log\+\_\+systemd\+\_\+journal}]{,  }\item[{cfg\+\_\+no\+\_\+log\+\_\+systemd\+\_\+journal\+\_\+cmd}]{,  }\item[{\char`\"{}no log systemd-\/journal\char`\"{}}]{,  }\item[{\textbf{ NO\+\_\+\+STR} \textbf{ LOG\+\_\+\+STR} \char`\"{}Logging to systemd-\/\textbf{ journal\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+\_\+destroy()}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+SYSTEMD}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a0ccee6549073ff5222ce7f4951db2f04}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [11/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{diable\+\_\+logging}]{,  }\item[{disable\+\_\+logging\+\_\+cmd}]{,  }\item[{\char`\"{}logging disable\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Disables logging to this \textbf{ vty\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ telnet\+\_\+connection\+::dbg}, \textbf{ log\+\_\+del\+\_\+target()}, \textbf{ vty\+::priv}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a49c07478df8a93b406b1b6998a2cd1ac}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [12/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{enable\+\_\+logging}]{,  }\item[{enable\+\_\+logging\+\_\+cmd}]{,  }\item[{\char`\"{}logging enable\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Enables logging to this \textbf{ vty\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ telnet\+\_\+connection\+::dbg}, \textbf{ if()}, \textbf{ log\+\_\+add\+\_\+target()}, \textbf{ log\+\_\+target\+\_\+create\+\_\+vty()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ vty\+::priv}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a1970d9e1e15a023379cbc9d639336048}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [13/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+fltr\+\_\+all}]{,  }\item[{logging\+\_\+fltr\+\_\+all\+\_\+cmd}]{,  }\item[{\char`\"{}logging filter all (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \textbf{ FILTER\+\_\+\+STR} \char`\"{}Do you want to log all messages?\textbackslash{}\textbf{ n}\char`\"{} \char`\"{}Only print messages matched by other \textbf{ filters\textbackslash{}n}\char`\"{} \char`\"{}Bypass filter and print all \textbf{ messages\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+all\+\_\+filter()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_aa8d8882ad76deb7bf037c52ca5f8ba07}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [14/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+level}]{,  }\item[{logging\+\_\+level\+\_\+cmd}]{,  }\item[{NULL}]{,  }\item[{NULL}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ log\+\_\+target\+::categories}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ level}, \textbf{ log\+\_\+cache\+\_\+update()}, \textbf{ log\+\_\+parse\+\_\+category()}, \textbf{ log\+\_\+parse\+\_\+level()}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_af361c10d038a0c27f5a7bf359d945979}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [15/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+level\+\_\+force\+\_\+all}]{,  }\item[{logging\+\_\+level\+\_\+force\+\_\+all\+\_\+cmd}]{,  }\item[{\char`\"{}logging \textbf{ level} force-\/all \char`\"{}}]{LOG\+\_\+\+LEVEL\+\_\+\+ARGS,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \textbf{ FORCE\+\_\+\+ALL\+\_\+\+STR}}]{LOG\+\_\+\+LEVEL\+\_\+\+STRS }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ level}, \textbf{ log\+\_\+parse\+\_\+level()}, \textbf{ log\+\_\+set\+\_\+log\+\_\+level()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_aaa2e7d12b5fb47fae43f89af18fb290c}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [16/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+level\+\_\+set\+\_\+all}]{,  }\item[{logging\+\_\+level\+\_\+set\+\_\+all\+\_\+cmd}]{,  }\item[{\char`\"{}logging \textbf{ level} set-\/all \char`\"{}}]{LOG\+\_\+\+LEVEL\+\_\+\+ARGS,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR} \char`\"{}Once-\/off set all categories to the given log level. There is no single command\char`\"{} \char`\"{} to take back these changes -\/-\/ each category is set to the given}]{level,  }\item[{\textbf{ period.\textbackslash{}n}\char`\"{}}]{LOG\+\_\+\+LEVEL\+\_\+\+STRS }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+target\+::categories}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ level}, \textbf{ log\+\_\+cache\+\_\+update()}, \textbf{ log\+\_\+parse\+\_\+level()}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+info\+\_\+cat\+::name}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ osmo\+\_\+log\+\_\+info}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_acd8d4a252bb907d977dd9a8a8bc03b01}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [17/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+cat}]{,  }\item[{logging\+\_\+prnt\+\_\+cat\+\_\+cmd}]{,  }\item[{\char`\"{}logging print category (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with category/subsystem \textbf{ name\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+print\+\_\+category()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a7abd85d78c9fcb6ca8129abc17d674cc}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [18/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+cat\+\_\+hex}]{,  }\item[{logging\+\_\+prnt\+\_\+cat\+\_\+hex\+\_\+cmd}]{,  }\item[{\char`\"{}logging print category-\/hex (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with category/subsystem nr in hex (\textquotesingle{}$<$000b$>$\textquotesingle{})\textbackslash{}\textbf{ n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+print\+\_\+category\+\_\+hex()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a1ce722e4076a2a9bcda882cc6bac16b5}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [19/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+ext\+\_\+timestamp}]{,  }\item[{logging\+\_\+prnt\+\_\+ext\+\_\+timestamp\+\_\+cmd}]{,  }\item[{\char`\"{}logging print extended-\/timestamp (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log message \textbf{ timestamping\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with current timestamp with \textbf{ YYYYMMDDhhmmssnnn\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+print\+\_\+extended\+\_\+timestamp()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a9daebf188b34203ae11079ffb1a1f262}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [20/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+file}]{,  }\item[{logging\+\_\+prnt\+\_\+file\+\_\+cmd}]{,  }\item[{\char`\"{}logging print \textbf{ file} (0$\vert$1$\vert$basename) \char`\"{}}]{[last],  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with the source \textbf{ file} and \textbf{ line\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with the source \textbf{ file}\textquotesingle{}s basename (strip leading paths) and \textbf{ line\textbackslash{}n}\char`\"{} \char`\"{}Log source \textbf{ file} info at the end of a log line. If}]{omitted,  }\item[{log source \textbf{ file} info just\char`\"{} \char`\"{} before the log \textbf{ text.\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argc}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ get\+\_\+string\+\_\+value()}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+HEADER\+\_\+\+END}, \textbf{ LOG\+\_\+\+FILENAME\+\_\+\+POS\+\_\+\+LINE\+\_\+\+END}, \textbf{ log\+\_\+set\+\_\+print\+\_\+filename2()}, \textbf{ log\+\_\+set\+\_\+print\+\_\+filename\+\_\+pos()}, \textbf{ logging\+\_\+print\+\_\+file\+\_\+args}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a9a9ac2b806fe4061d401299574c4a3d2}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [21/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+level}]{,  }\item[{logging\+\_\+prnt\+\_\+level\+\_\+cmd}]{,  }\item[{\char`\"{}logging print \textbf{ level} (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with the log \textbf{ level} \textbf{ name\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+print\+\_\+level()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a63068c6455adde3b7973d83b6c953586}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [22/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+tid}]{,  }\item[{logging\+\_\+prnt\+\_\+tid\+\_\+cmd}]{,  }\item[{\char`\"{}logging print thread-\/id (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Log output \textbf{ settings\textbackslash{}n}\char`\"{} \char`\"{}Configure log message logging Thread \textbf{ ID\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with current Thread \textbf{ ID\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+print\+\_\+tid()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_ae3aeb2cfe95730bf9ce649ae3f8a6869}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [23/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+prnt\+\_\+timestamp}]{,  }\item[{logging\+\_\+prnt\+\_\+timestamp\+\_\+cmd}]{,  }\item[{\char`\"{}logging timestamp (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Configure log message \textbf{ timestamping\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t prefix each log \textbf{ message\textbackslash{}n}\char`\"{} \char`\"{}Prefix each log message with current \textbf{ timestamp\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+print\+\_\+timestamp()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a5108b4df452bad6bf0434f08f4fe2eb6}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [24/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+set\+\_\+category\+\_\+mask}]{,  }\item[{logging\+\_\+set\+\_\+category\+\_\+mask\+\_\+cmd}]{,  }\item[{\char`\"{}logging set-\/log-\/mask MASK\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Set the logmask of this logging \textbf{ target\textbackslash{}n}\char`\"{} \char`\"{}List of logging categories to}]{log,  }\item[{e.\+g. \textquotesingle{}abc\+:mno\+:xyz\textquotesingle{}. Available log categories depend on the specific\char`\"{} \char`\"{}}]{application,  }\item[{refer to the \textquotesingle{}logging \textbf{ level}\textquotesingle{} command. Optionally add individual log levels like\char`\"{} \char`\"{} \textquotesingle{}}]{abc,  }\item[{1\+:mno}]{,  }\item[{3\+:xyz}]{,  }\item[{5\textquotesingle{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+parse\+\_\+category\+\_\+mask()}, \textbf{ OSMO\+\_\+\+STRINGIFY}, \textbf{ OSMO\+\_\+\+STRINGIFY\+\_\+\+VAL}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_ad201600d82ea205397cc6d0b9d4f5b61}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [25/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{logging\+\_\+use\+\_\+clr}]{,  }\item[{logging\+\_\+use\+\_\+clr\+\_\+cmd}]{,  }\item[{\char`\"{}logging \textbf{ color} (0$\vert$1)\char`\"{}}]{,  }\item[{\textbf{ LOGGING\+\_\+\+STR} \char`\"{}Configure \textbf{ color}-\/printing \textbf{ for} log \textbf{ messages\textbackslash{}n}\char`\"{} \char`\"{}Don\textquotesingle{}t use \textbf{ color} \textbf{ for} printing \textbf{ messages\textbackslash{}n}\char`\"{} \char`\"{}Use \textbf{ color} \textbf{ for} printing \textbf{ messages\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ argv}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+use\+\_\+color()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_acf275e7c79ff6198723fbc4441c30735}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [26/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{no\+\_\+logging\+\_\+level\+\_\+force\+\_\+all}]{,  }\item[{no\+\_\+logging\+\_\+level\+\_\+force\+\_\+all\+\_\+cmd}]{,  }\item[{\char`\"{}no logging \textbf{ level} force-\/all\char`\"{}}]{,  }\item[{\textbf{ NO\+\_\+\+STR} \textbf{ LOGGING\+\_\+\+STR} \textbf{ LEVEL\+\_\+\+STR}}]{NO\+\_\+\+FORCE\+\_\+\+ALL\+\_\+\+STR }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ log\+\_\+set\+\_\+log\+\_\+level()}, and \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}.

\mbox{\label{logging__vty_8c_a1d6640d1320f14ed6f1ffb52d162b39d}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [27/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{show\+\_\+alarms}]{,  }\item[{show\+\_\+alarms\+\_\+cmd}]{,  }\item[{\char`\"{}show alarms\char`\"{}}]{,  }\item[{\textbf{ SHOW\+\_\+\+STR} \textbf{ SHOW\+\_\+\+LOG\+\_\+\+STR} \char`\"{}Show the contents of the logging \textbf{ ringbuffer\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ log\+\_\+target\+\_\+find()}, \textbf{ log\+\_\+tgt\+\_\+mutex\+\_\+lock}, \textbf{ LOG\+\_\+\+TGT\+\_\+\+TYPE\+\_\+\+STRRB}, \textbf{ osmo\+\_\+strrb\+\_\+elements()}, \textbf{ osmo\+\_\+strrb\+\_\+get\+\_\+nth()}, \textbf{ log\+\_\+target\+::rb}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, \textbf{ log\+\_\+target\+::tgt\+\_\+rb}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a61cb68cfc068dab73d896593d9cff1d4}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [28/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{show\+\_\+logging\+\_\+vty}]{,  }\item[{show\+\_\+logging\+\_\+vty\+\_\+cmd}]{,  }\item[{\char`\"{}show logging \textbf{ vty}\char`\"{}}]{,  }\item[{\textbf{ SHOW\+\_\+\+STR} \textbf{ SHOW\+\_\+\+LOG\+\_\+\+STR} \char`\"{}Show current logging configuration \textbf{ for} this \textbf{ vty\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ ACQUIRE\+\_\+\+VTY\+\_\+\+LOG\+\_\+\+TGT\+\_\+\+WITH\+\_\+\+LOCK}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ RET\+\_\+\+WITH\+\_\+\+UNLOCK}, and \textbf{ vty\+\_\+print\+\_\+logtarget()}.

\mbox{\label{logging__vty_8c_ac7676a459b217e96b75a9a6668ea08e8}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN@{DEFUN}}
\index{DEFUN@{DEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [29/29]}}
{\footnotesize\ttfamily DEFUN (\begin{DoxyParamCaption}\item[{vty\+\_\+logp}]{,  }\item[{vty\+\_\+logp\+\_\+cmd}]{,  }\item[{NULL}]{,  }\item[{NULL}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ argv}, \textbf{ argv\+\_\+concat()}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ level}, \textbf{ log\+\_\+parse\+\_\+category()}, \textbf{ log\+\_\+parse\+\_\+level()}, \textbf{ LOGP}, \textbf{ log\+\_\+info\+::num\+\_\+cat\+\_\+user}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a8ca6d6a5ad575dbea2a72c06b6ff08dc}} 
\index{logging\_vty.c@{logging\_vty.c}!DEFUN\_DEPRECATED@{DEFUN\_DEPRECATED}}
\index{DEFUN\_DEPRECATED@{DEFUN\_DEPRECATED}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{DEFUN\_DEPRECATED()}
{\footnotesize\ttfamily DEFUN\+\_\+\+DEPRECATED (\begin{DoxyParamCaption}\item[{deprecated\+\_\+logging\+\_\+level\+\_\+everything}]{,  }\item[{deprecated\+\_\+logging\+\_\+level\+\_\+everything\+\_\+cmd}]{,  }\item[{NULL}]{,  }\item[{NULL}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a35428271cb4ed7a1f50b5a5a31024e0d}} 
\index{logging\_vty.c@{logging\_vty.c}!gDEFUN@{gDEFUN}}
\index{gDEFUN@{gDEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{gDEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily g\+DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+description}]{,  }\item[{\textbf{ cfg\+\_\+description\+\_\+cmd}}]{,  }\item[{\char`\"{}description .TEXT\char`\"{}}]{,  }\item[{\char`\"{}Save human-\/readable description of the \textbf{ object\textbackslash{}n}\char`\"{} \char`\"{}Text until the end of the \textbf{ line\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ argc}, \textbf{ argv}, \textbf{ argv\+\_\+concat()}, \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ vty\+::index\+\_\+sub}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_aca448797cbc1dea309ef7537ca52e701}} 
\index{logging\_vty.c@{logging\_vty.c}!gDEFUN@{gDEFUN}}
\index{gDEFUN@{gDEFUN}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{gDEFUN()\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily g\+DEFUN (\begin{DoxyParamCaption}\item[{cfg\+\_\+no\+\_\+description}]{,  }\item[{\textbf{ cfg\+\_\+no\+\_\+description\+\_\+cmd}}]{,  }\item[{\char`\"{}no description\char`\"{}}]{,  }\item[{\textbf{ NO\+\_\+\+STR} \char`\"{}Remove description of the \textbf{ object\textbackslash{}n}\char`\"{}}]{ }\end{DoxyParamCaption})}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ CMD\+\_\+\+WARNING}, \textbf{ vty\+::index\+\_\+sub}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a9a68d28c0ec0b0220cbfe313442d1708}} 
\index{logging\_vty.c@{logging\_vty.c}!gen\_logging\_level\_cmd\_strs@{gen\_logging\_level\_cmd\_strs}}
\index{gen\_logging\_level\_cmd\_strs@{gen\_logging\_level\_cmd\_strs}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{gen\_logging\_level\_cmd\_strs()}
{\footnotesize\ttfamily static void gen\+\_\+logging\+\_\+level\+\_\+cmd\+\_\+strs (\begin{DoxyParamCaption}\item[{struct \textbf{ cmd\+\_\+element} $\ast$}]{cmd,  }\item[{const char $\ast$}]{level\+\_\+args,  }\item[{const char $\ast$}]{level\+\_\+strs }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+category\+\_\+strings()}, \textbf{ assert\+\_\+loginfo()}, \textbf{ cmd\+\_\+element\+::doc}, \textbf{ LEVEL\+\_\+\+STR}, \textbf{ LOGGING\+\_\+\+STR}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, \textbf{ cmd\+\_\+element\+::string}, and \textbf{ tall\+\_\+log\+\_\+ctx}.



Referenced by \textbf{ logging\+\_\+vty\+\_\+add\+\_\+cmds()}.

\mbox{\label{logging__vty_8c_a927fe55295e4fd2cbce77454ce1b43af}} 
\index{logging\_vty.c@{logging\_vty.c}!gen\_vty\_logp\_cmd\_strs@{gen\_vty\_logp\_cmd\_strs}}
\index{gen\_vty\_logp\_cmd\_strs@{gen\_vty\_logp\_cmd\_strs}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{gen\_vty\_logp\_cmd\_strs()}
{\footnotesize\ttfamily static void gen\+\_\+vty\+\_\+logp\+\_\+cmd\+\_\+strs (\begin{DoxyParamCaption}\item[{struct \textbf{ cmd\+\_\+element} $\ast$}]{cmd }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ add\+\_\+category\+\_\+strings()}, \textbf{ assert\+\_\+loginfo()}, \textbf{ cmd\+\_\+element\+::doc}, \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+ARGS}, \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+STRS}, \textbf{ OSMO\+\_\+\+ASSERT}, \textbf{ osmo\+\_\+log\+\_\+info}, \textbf{ osmo\+\_\+talloc\+\_\+asprintf}, \textbf{ cmd\+\_\+element\+::string}, and \textbf{ tall\+\_\+log\+\_\+ctx}.



Referenced by \textbf{ logging\+\_\+vty\+\_\+add\+\_\+cmds()}.

\mbox{\label{logging__vty_8c_a98bfdaed2328d974a9d51109fca6f4b3}} 
\index{logging\_vty.c@{logging\_vty.c}!log\_deprecated\_func@{log\_deprecated\_func}}
\index{log\_deprecated\_func@{log\_deprecated\_func}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{log\_deprecated\_func()}
{\footnotesize\ttfamily static int log\+\_\+deprecated\+\_\+func (\begin{DoxyParamCaption}\item[{struct \textbf{ cmd\+\_\+element} $\ast$}]{cmd,  }\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{int}]{argc,  }\item[{const char $\ast$}]{argv[$\,$] }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ CMD\+\_\+\+SUCCESS}, \textbf{ cmd\+\_\+element\+::string}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ logging\+\_\+vty\+\_\+add\+\_\+deprecated\+\_\+subsys()}.

\mbox{\label{logging__vty_8c_a89ca200449e85d92349155a5de0d9176}} 
\index{logging\_vty.c@{logging\_vty.c}!log\_target\_create\_vty@{log\_target\_create\_vty}}
\index{log\_target\_create\_vty@{log\_target\_create\_vty}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{log\_target\_create\_vty()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ log\+\_\+target\+\_\+create\+\_\+vty (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty }\end{DoxyParamCaption})}



References \textbf{ \+\_\+vty\+\_\+output()}, \textbf{ log\+\_\+target\+\_\+create()}, \textbf{ log\+\_\+target\+::output}, \textbf{ log\+\_\+target\+::tgt\+\_\+vty}, \textbf{ log\+\_\+target\+::vty}, and \textbf{ vty}.



Referenced by \textbf{ DEFUN()}.

\mbox{\label{logging__vty_8c_a0660beaeb27dcca883acdf90434e0925}} 
\index{logging\_vty.c@{logging\_vty.c}!logging\_vty\_add\_cmds@{logging\_vty\_add\_cmds}}
\index{logging\_vty\_add\_cmds@{logging\_vty\_add\_cmds}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{logging\_vty\_add\_cmds()}
{\footnotesize\ttfamily void logging\+\_\+vty\+\_\+add\+\_\+cmds (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Register logging related commands to the VTY. 

Call this once from your application if you want to support those commands. 

References \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ cfg\+\_\+log\+\_\+node}, \textbf{ CONFIG\+\_\+\+NODE}, \textbf{ config\+\_\+write\+\_\+log()}, \textbf{ EVERYTHING\+\_\+\+STR}, \textbf{ gen\+\_\+logging\+\_\+level\+\_\+cmd\+\_\+strs()}, \textbf{ gen\+\_\+vty\+\_\+logp\+\_\+cmd\+\_\+strs()}, \textbf{ install\+\_\+lib\+\_\+element()}, \textbf{ install\+\_\+lib\+\_\+element\+\_\+ve()}, \textbf{ install\+\_\+node()}, \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+ARGS}, and \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+STRS}.

\mbox{\label{logging__vty_8c_ab5a144c85374d5ea131460b513323388}} 
\index{logging\_vty.c@{logging\_vty.c}!logging\_vty\_add\_deprecated\_subsys@{logging\_vty\_add\_deprecated\_subsys}}
\index{logging\_vty\_add\_deprecated\_subsys@{logging\_vty\_add\_deprecated\_subsys}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{logging\_vty\_add\_deprecated\_subsys()}
{\footnotesize\ttfamily void logging\+\_\+vty\+\_\+add\+\_\+deprecated\+\_\+subsys (\begin{DoxyParamCaption}\item[{void $\ast$}]{ctx,  }\item[{const char $\ast$}]{name }\end{DoxyParamCaption})}



References \textbf{ cmd\+\_\+element\+::attr}, \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ CMD\+\_\+\+ATTR\+\_\+\+DEPRECATED}, \textbf{ cmd\+\_\+element\+::doc}, \textbf{ cmd\+\_\+element\+::func}, \textbf{ install\+\_\+lib\+\_\+element()}, \textbf{ LEVEL\+\_\+\+STR}, \textbf{ log\+\_\+deprecated\+\_\+func()}, \textbf{ LOG\+\_\+\+LEVEL\+\_\+\+ARGS}, \textbf{ name}, \textbf{ OSMO\+\_\+\+ASSERT}, and \textbf{ cmd\+\_\+element\+::string}.

\mbox{\label{logging__vty_8c_a0a5c30bbfbb9a192365ac16ed7943fc3}} 
\index{logging\_vty.c@{logging\_vty.c}!osmo\_log\_vty2tgt@{osmo\_log\_vty2tgt}}
\index{osmo\_log\_vty2tgt@{osmo\_log\_vty2tgt}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{osmo\_log\_vty2tgt()}
{\footnotesize\ttfamily struct \textbf{ log\+\_\+target} $\ast$ osmo\+\_\+log\+\_\+vty2tgt (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty }\end{DoxyParamCaption})}



Get log target associated to VTY console. 


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


References \textbf{ CFG\+\_\+\+LOG\+\_\+\+NODE}, \textbf{ telnet\+\_\+connection\+::dbg}, \textbf{ if()}, \textbf{ vty\+::index}, \textbf{ vty\+::node}, \textbf{ vty\+::priv}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.

\mbox{\label{logging__vty_8c_a4efd1286ff2e693f993813fc67528278}} 
\index{logging\_vty.c@{logging\_vty.c}!vty\_print\_logtarget@{vty\_print\_logtarget}}
\index{vty\_print\_logtarget@{vty\_print\_logtarget}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{vty\_print\_logtarget()}
{\footnotesize\ttfamily static void vty\+\_\+print\+\_\+logtarget (\begin{DoxyParamCaption}\item[{struct \textbf{ vty} $\ast$}]{vty,  }\item[{const struct \textbf{ log\+\_\+info} $\ast$}]{info,  }\item[{const struct \textbf{ log\+\_\+target} $\ast$}]{tgt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



References \textbf{ log\+\_\+info\+::cat}, \textbf{ log\+\_\+target\+::categories}, \textbf{ log\+\_\+info\+\_\+cat\+::description}, \textbf{ log\+\_\+category\+::enabled}, \textbf{ log\+\_\+target\+::filter\+\_\+map}, \textbf{ LOG\+\_\+\+FLT\+\_\+\+ALL}, \textbf{ log\+\_\+level\+\_\+str()}, \textbf{ log\+\_\+category\+::loglevel}, \textbf{ log\+\_\+target\+::loglevel}, \textbf{ log\+\_\+info\+\_\+cat\+::name}, \textbf{ log\+\_\+info\+::num\+\_\+cat}, \textbf{ log\+\_\+info\+::print\+\_\+fn}, \textbf{ log\+\_\+target\+::print\+\_\+timestamp}, \textbf{ log\+\_\+target\+::use\+\_\+color}, \textbf{ VTY\+\_\+\+NEWLINE}, and \textbf{ vty\+\_\+out()}.



Referenced by \textbf{ DEFUN()}.



\doxysubsection{Variable Documentation}
\mbox{\label{logging__vty_8c_a57d74b81e292ab681457947fefa61aac}} 
\index{logging\_vty.c@{logging\_vty.c}!cfg\_log\_node@{cfg\_log\_node}}
\index{cfg\_log\_node@{cfg\_log\_node}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{cfg\_log\_node}
{\footnotesize\ttfamily struct \textbf{ cmd\+\_\+node} cfg\+\_\+log\+\_\+node}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        CFG\_LOG\_NODE,}
\DoxyCodeLine{        \textcolor{stringliteral}{"{}\%s(config-\/log)\# "{}},}
\DoxyCodeLine{        1}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ logging\+\_\+vty\+\_\+add\+\_\+cmds()}.

\mbox{\label{logging__vty_8c_a3c034ce26af20555b32aaba52c0bf8b8}} 
\index{logging\_vty.c@{logging\_vty.c}!logging\_print\_file\_args@{logging\_print\_file\_args}}
\index{logging\_print\_file\_args@{logging\_print\_file\_args}!logging\_vty.c@{logging\_vty.c}}
\doxysubsubsection{logging\_print\_file\_args}
{\footnotesize\ttfamily const struct \textbf{ value\+\_\+string} logging\+\_\+print\+\_\+file\+\_\+args[$\,$]\hspace{0.3cm}{\ttfamily [static]}}

{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{= \{}
\DoxyCodeLine{        \{ LOG\_FILENAME\_NONE, \textcolor{stringliteral}{"{}0"{}} \},}
\DoxyCodeLine{        \{ LOG\_FILENAME\_PATH, \textcolor{stringliteral}{"{}1"{}} \},}
\DoxyCodeLine{        \{ LOG\_FILENAME\_BASENAME, \textcolor{stringliteral}{"{}basename"{}} \},}
\DoxyCodeLine{        \{ 0, NULL \}}
\DoxyCodeLine{\}}

\end{DoxyCode}


Referenced by \textbf{ config\+\_\+write\+\_\+log\+\_\+single()}, and \textbf{ DEFUN()}.

