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
|
/*! \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] target logging target
|
||||||
* \param[in] level log level of currnet message
|
* \param[in] level log level of currnet message
|
||||||
* \param[in] string the string that is to be written to the log
|
* \param[in] string the string that is to be written to the log
|
||||||
*/
|
*/
|
||||||
void (*output) (struct log_target *target, unsigned int level,
|
void (*output) (struct log_target *target, unsigned int level,
|
||||||
const char *string);
|
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 */
|
/* use the above macros */
|
||||||
|
|
|
@ -385,6 +385,9 @@ void osmo_vlogp(int subsys, int level, const char *file, int line,
|
||||||
* in undefined state. Since _output uses vsnprintf and it may
|
* in undefined state. Since _output uses vsnprintf and it may
|
||||||
* be called several times, we have to pass a copy of ap. */
|
* be called several times, we have to pass a copy of ap. */
|
||||||
va_copy(bp, ap);
|
va_copy(bp, ap);
|
||||||
|
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);
|
_output(tar, subsys, level, file, line, cont, format, bp);
|
||||||
va_end(bp);
|
va_end(bp);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue