mirror of https://gerrit.osmocom.org/libosmocore
logging: Extend log_target with call-back for un-formatted log line
Some targets might not want to receive only an opaque, pre-formatted string, but rather the unformatted arguments with metadata like sub-system/level/file/line. We solve this by introducing a log_target->output_raw() function pointer. If a target specifies this function, it takes precedence over the regular log_target->output() function. Change-Id: I9dc9205d70dce9581458e7e9dc2d8a92991897bd
This commit is contained in:
parent
909cbecbb9
commit
d7c0a373ff
|
@ -207,13 +207,29 @@ struct log_target {
|
|||
};
|
||||
|
||||
/*! \brief call-back function to be called when the logging framework
|
||||
* wants to log somethnig.
|
||||
* wants to log a fully formatted string
|
||||
* \param[in] target logging target
|
||||
* \param[in] level log level of currnet message
|
||||
* \param[in] string the string that is to be written to the log
|
||||
*/
|
||||
void (*output) (struct log_target *target, unsigned int level,
|
||||
const char *string);
|
||||
|
||||
/*! \brief alternative call-back function to which the logging
|
||||
* framework passes the unfortmatted input arguments,
|
||||
* i.e. bypassing the internal string formatter
|
||||
* \param[in] target logging target
|
||||
* \param[in] subsys logging sub-system
|
||||
* \param[in] level logging level
|
||||
* \param[in] file soure code file name
|
||||
* \param[in] line source code file line number
|
||||
* \param[in] cont continuation of previous statement?
|
||||
* \param[in] format format string
|
||||
* \param[in] ap vararg list of printf arguments
|
||||
*/
|
||||
void (*raw_output)(struct log_target *target, int subsys,
|
||||
unsigned int level, const char *file, int line,
|
||||
int cont, const char *format, va_list ap);
|
||||
};
|
||||
|
||||
/* use the above macros */
|
||||
|
|
|
@ -385,7 +385,10 @@ void osmo_vlogp(int subsys, int level, const char *file, int line,
|
|||
* in undefined state. Since _output uses vsnprintf and it may
|
||||
* be called several times, we have to pass a copy of ap. */
|
||||
va_copy(bp, ap);
|
||||
_output(tar, subsys, level, file, line, cont, format, bp);
|
||||
if (tar->raw_output)
|
||||
tar->raw_output(tar, subsys, level, file, line, cont, format, bp);
|
||||
else
|
||||
_output(tar, subsys, level, file, line, cont, format, bp);
|
||||
va_end(bp);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue