Commit c8d5ba62 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

logger: track file, line and function for debug

parent b6e8d39f
...@@ -60,23 +60,32 @@ typedef struct vlc_log_t ...@@ -60,23 +60,32 @@ typedef struct vlc_log_t
const char *psz_object_type; /**< Emitter object type name */ const char *psz_object_type; /**< Emitter object type name */
const char *psz_module; /**< Emitter module (source code) */ const char *psz_module; /**< Emitter module (source code) */
const char *psz_header; /**< Additional header (used by VLM media) */ const char *psz_header; /**< Additional header (used by VLM media) */
const char *file; /**< Source code file name or NULL */
int line; /**< Source code file line number or -1 */
const char *func; /**< Source code calling function name or NULL */
} vlc_log_t; } vlc_log_t;
VLC_API void vlc_Log(vlc_object_t *, int, VLC_API void vlc_Log(vlc_object_t *obj, int prio, const char *module,
const char *, const char *, ...) VLC_FORMAT( 4, 5 ); const char *file, unsigned line, const char *func,
VLC_API void vlc_vaLog(vlc_object_t *, int, const char *format, ...) VLC_FORMAT(7, 8);
const char *, const char *, va_list); VLC_API void vlc_vaLog(vlc_object_t *obj, int prio, const char *module,
#define msg_GenericVa(a, b, c, d) \ const char *file, unsigned line, const char *func,
vlc_vaLog(VLC_OBJECT(a), b, MODULE_STRING, c, d) const char *format, va_list ap);
#define msg_GenericVa(o, p, fmt, ap) \
vlc_vaLog(VLC_OBJECT(o), p, MODULE_STRING, __FILE__, __LINE__, __func__, \
fmt, ap)
#define msg_Info( p_this, ... ) \ #define msg_Generic(o, p, ...) \
vlc_Log( VLC_OBJECT(p_this), VLC_MSG_INFO, MODULE_STRING, __VA_ARGS__ ) vlc_Log(VLC_OBJECT(o), p, MODULE_STRING, __FILE__, __LINE__, \
#define msg_Err( p_this, ... ) \ __func__, __VA_ARGS__)
vlc_Log( VLC_OBJECT(p_this), VLC_MSG_ERR, MODULE_STRING, __VA_ARGS__ ) #define msg_Info(p_this, ...) \
#define msg_Warn( p_this, ... ) \ msg_Generic(p_this, VLC_MSG_INFO, __VA_ARGS__)
vlc_Log( VLC_OBJECT(p_this), VLC_MSG_WARN, MODULE_STRING, __VA_ARGS__ ) #define msg_Err(p_this, ...) \
#define msg_Dbg( p_this, ... ) \ msg_Generic(p_this, VLC_MSG_ERR, __VA_ARGS__)
vlc_Log( VLC_OBJECT(p_this), VLC_MSG_DBG, MODULE_STRING, __VA_ARGS__ ) #define msg_Warn(p_this, ...) \
msg_Generic(p_this, VLC_MSG_WARN, __VA_ARGS__)
#define msg_Dbg(p_this, ...) \
msg_Generic(p_this, VLC_MSG_DBG, __VA_ARGS__)
#ifndef MODULE_STRING #ifndef MODULE_STRING
# define MODULE_STRING __FILE__ # define MODULE_STRING __FILE__
......
...@@ -88,6 +88,7 @@ static void Win32DebugOutputMsg (void *, int , const vlc_log_t *, ...@@ -88,6 +88,7 @@ static void Win32DebugOutputMsg (void *, int , const vlc_log_t *,
* to vlc_Log(). * to vlc_Log().
*/ */
void vlc_vaLog (vlc_object_t *obj, int type, const char *module, void vlc_vaLog (vlc_object_t *obj, int type, const char *module,
const char *file, unsigned line, const char *func,
const char *format, va_list args) const char *format, va_list args)
{ {
if (obj != NULL && obj->i_flags & OBJECT_FLAGS_QUIET) if (obj != NULL && obj->i_flags & OBJECT_FLAGS_QUIET)
...@@ -115,6 +116,9 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module, ...@@ -115,6 +116,9 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module,
msg.psz_object_type = (obj != NULL) ? obj->psz_object_type : "generic"; msg.psz_object_type = (obj != NULL) ? obj->psz_object_type : "generic";
msg.psz_module = module; msg.psz_module = module;
msg.psz_header = NULL; msg.psz_header = NULL;
msg.file = file;
msg.line = line;
msg.func = func;
for (vlc_object_t *o = obj; o != NULL; o = o->p_parent) for (vlc_object_t *o = obj; o != NULL; o = o->p_parent)
if (o->psz_header != NULL) if (o->psz_header != NULL)
...@@ -142,15 +146,19 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module, ...@@ -142,15 +146,19 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module,
* \param type VLC_MSG_* message type (info, error, warning or debug) * \param type VLC_MSG_* message type (info, error, warning or debug)
* \param module name of module from which the message come * \param module name of module from which the message come
* (normally MODULE_STRING) * (normally MODULE_STRING)
* \param file source module file name (normally __FILE__) or NULL
* \param line function call source line number (normally __LINE__) or 0
* \param func calling function name (normally __func__) or NULL
* \param format printf-like message format * \param format printf-like message format
*/ */
void vlc_Log(vlc_object_t *obj, int type, const char *module, void vlc_Log(vlc_object_t *obj, int type, const char *module,
const char *file, unsigned line, const char *func,
const char *format, ... ) const char *format, ... )
{ {
va_list ap; va_list ap;
va_start(ap, format); va_start(ap, format);
vlc_vaLog(obj, type, module, format, ap); vlc_vaLog(obj, type, module, file, line, func, format, ap);
va_end(ap); va_end(ap);
} }
...@@ -265,6 +273,9 @@ static void vlc_vaLogEarly(void *d, int type, const vlc_log_t *item, ...@@ -265,6 +273,9 @@ static void vlc_vaLogEarly(void *d, int type, const vlc_log_t *item,
log->meta.psz_object_type = item->psz_object_type; log->meta.psz_object_type = item->psz_object_type;
log->meta.psz_module = item->psz_module; /* Ditto. */ log->meta.psz_module = item->psz_module; /* Ditto. */
log->meta.psz_header = item->psz_header ? strdup(item->psz_header) : NULL; log->meta.psz_header = item->psz_header ? strdup(item->psz_header) : NULL;
log->meta.file = item->file;
log->meta.line = item->line;
log->meta.func = item->func;
int canc = vlc_savecancel(); /* XXX: needed for vasprintf() ? */ int canc = vlc_savecancel(); /* XXX: needed for vasprintf() ? */
if (vasprintf(&log->msg, format, ap) == -1) if (vasprintf(&log->msg, format, ap) == -1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment