PipeWire
1.6.4
Toggle main menu visibility
Loading...
Searching...
No Matches
log.h
Go to the documentation of this file.
1
/* Simple Plugin API */
2
/* SPDX-FileCopyrightText: Copyright © 2022 Wim Taymans */
3
/* SPDX-License-Identifier: MIT */
4
5
#ifndef SPA_DEBUG_LOG_H
6
#define SPA_DEBUG_LOG_H
7
8
#include <stdio.h>
9
#include <stdarg.h>
10
11
#include <
spa/utils/defs.h
>
12
#include <
spa/support/log.h
>
13
#include <
spa/debug/context.h
>
14
#include <
spa/debug/dict.h
>
15
#include <
spa/debug/format.h
>
16
#include <
spa/debug/mem.h
>
17
#include <
spa/debug/pod.h
>
18
19
#ifdef __cplusplus
20
extern
"C"
{
21
#endif
22
23
#ifndef SPA_API_DEBUG_LOG
24
#ifdef SPA_API_IMPL
25
#define SPA_API_DEBUG_LOG SPA_API_IMPL
26
#else
27
#define SPA_API_DEBUG_LOG static inline
28
#endif
29
#endif
30
35
36
struct
spa_debug_log_ctx
{
37
struct
spa_debug_context
ctx
;
38
struct
spa_log
*
log
;
39
enum
spa_log_level
level
;
40
const
struct
spa_log_topic
*topic;
41
const
char
*
file
;
42
int
line
;
43
const
char
*
func
;
44
};
45
46
SPA_PRINTF_FUNC
(2,3)
47
SPA_API_DEBUG_LOG
void
spa_debug_log_log
(struct
spa_debug_context
*
ctx
, const
char
*fmt, ...)
48
{
49
struct
spa_debug_log_ctx
*c =
SPA_CONTAINER_OF
(
ctx
,
struct
spa_debug_log_ctx
,
ctx
);
50
va_list
args
;
51
va_start
(
args
, fmt);
52
spa_log_logtv
(c->
log
, c->
level
, c->
topic
, c->
file
, c->
line
, c->
func
, fmt,
args
);
53
va_end
(
args
);
54
}
55
56
#define SPA_LOGF_DEBUG_INIT(_l,_lev,_t,_file,_line,_func) \
57
(struct spa_debug_log_ctx){ { spa_debug_log_log }, _l, _lev, _t, \
58
_file, _line, _func }
59
60
#define SPA_LOGT_DEBUG_INIT(_l,_lev,_t) \
61
SPA_LOGF_DEBUG_INIT(_l,_lev,_t,__FILE__,__LINE__,__func__)
62
63
#define SPA_LOG_DEBUG_INIT(l,lev) \
64
SPA_LOGT_DEBUG_INIT(l,lev,SPA_LOG_TOPIC_DEFAULT)
65
66
#define spa_debug_log_pod(l,lev,indent,info,pod) \
67
({ \
68
struct spa_debug_log_ctx c = SPA_LOG_DEBUG_INIT(l,lev); \
69
if (SPA_UNLIKELY(spa_log_level_topic_enabled(c.log, c.topic, c.level))) \
70
spa_debugc_pod(&c.ctx, indent, info, pod); \
71
})
72
73
#define spa_debug_log_format(l,lev,indent,info,format) \
74
({ \
75
struct spa_debug_log_ctx c = SPA_LOG_DEBUG_INIT(l,lev); \
76
if (SPA_UNLIKELY(spa_log_level_topic_enabled(c.log, c.topic, c.level))) \
77
spa_debugc_format(&c.ctx, indent, info, format); \
78
})
79
80
#define spa_debug_log_mem(l,lev,indent,data,len) \
81
({ \
82
struct spa_debug_log_ctx c = SPA_LOG_DEBUG_INIT(l,lev); \
83
if (SPA_UNLIKELY(spa_log_level_topic_enabled(c.log, c.topic, c.level))) \
84
spa_debugc_mem(&c.ctx, indent, data, len); \
85
})
86
87
#define spa_debug_log_dict(l,lev,indent,dict) \
88
({ \
89
struct spa_debug_log_ctx c = SPA_LOG_DEBUG_INIT(l,lev); \
90
if (SPA_UNLIKELY(spa_log_level_topic_enabled(c.log, c.topic, c.level))) \
91
spa_debugc_dict(&c.ctx, indent, dict); \
92
})
93
94
#define spa_debug_log_error_location(l,lev,loc,fmt,...) \
95
({ \
96
struct spa_debug_log_ctx c = SPA_LOG_DEBUG_INIT(l,lev); \
97
if (SPA_UNLIKELY(spa_log_level_topic_enabled(c.log, c.topic, c.level))) { \
98
if (fmt) spa_debugc(&c.ctx, fmt, __VA_ARGS__); \
99
spa_debugc_error_location(&c.ctx, loc); \
100
} \
101
})
102
106
107
#ifdef __cplusplus
108
}
/* extern "C" */
109
#endif
110
111
#endif
/* SPA_DEBUG_LOG_H */
dict.h
spa/debug/dict.h
format.h
spa/debug/format.h
pod.h
spa/debug/pod.h
defs.h
spa/utils/defs.h
args
uint32_t int int const char va_list args
Definition
core.h:434
va_end
va_end(args)
va_start
va_start(args, message)
spa_debug_log_log
SPA_API_DEBUG_LOG void spa_debug_log_log(struct spa_debug_context *ctx, const char *fmt,...)
Definition
log.h:54
spa_log_level
spa_log_level
Definition
log.h:55
spa_log_logtv
SPA_API_LOG void spa_log_logtv(struct spa_log *l, enum spa_log_level level, const struct spa_log_topic *topic, const char *file, int line, const char *func, const char *fmt, va_list args)
Definition
log.h:281
SPA_CONTAINER_OF
#define SPA_CONTAINER_OF(p, t, m)
Definition
defs.h:235
SPA_PRINTF_FUNC
#define SPA_PRINTF_FUNC(fmt, arg1)
Definition
defs.h:297
context.h
spa/debug/context.h
SPA_API_DEBUG_LOG
#define SPA_API_DEBUG_LOG
Definition
log.h:34
mem.h
spa/debug/mem.h
log.h
spa/support/log.h
spa_debug_context
Definition
context.h:46
spa_debug_log_ctx
Definition
log.h:43
spa_debug_log_ctx::func
const char * func
Definition
log.h:50
spa_debug_log_ctx::line
int line
Definition
log.h:49
spa_debug_log_ctx::log
struct spa_log * log
Definition
log.h:45
spa_debug_log_ctx::level
enum spa_log_level level
Definition
log.h:46
spa_debug_log_ctx::ctx
struct spa_debug_context ctx
Definition
log.h:44
spa_debug_log_ctx::file
const char * file
Definition
log.h:48
spa_debug_log_ctx::topic
const struct spa_log_topic * topic
Definition
log.h:47
spa_log_topic
Identifier for a topic.
Definition
log.h:93
spa_log
Definition
log.h:71
spa
debug
log.h
Generated by
1.17.0