diff options
| -rw-r--r-- | include/osmocom/core/logging.h | 18 | ||||
| -rw-r--r-- | src/logging.c | 5 | 
2 files changed, 21 insertions, 2 deletions
| diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h index 3da9d336..581ebcec 100644 --- a/include/osmocom/core/logging.h +++ b/include/osmocom/core/logging.h @@ -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 */ diff --git a/src/logging.c b/src/logging.c index 9e30d5f8..165d8229 100644 --- a/src/logging.c +++ b/src/logging.c @@ -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);  	}  } | 
