Zephyr API Documentation
3.5.0
A Scalable Open Source RTOS
3.5.0
Toggle main menu visibility
Main Page
Related Pages
Modules
Data Structures
Data Structures
Data Structure Index
Data Fields
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Enumerator
Files
File List
Globals
All
$
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
$
a
b
c
d
f
g
h
i
k
l
m
n
o
p
r
s
t
x
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
z
Macros
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
Loading...
Searching...
No Matches
log.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2018 Nordic Semiconductor ASA
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
7
#ifndef ZEPHYR_INCLUDE_LOGGING_LOG_H_
8
#define ZEPHYR_INCLUDE_LOGGING_LOG_H_
9
10
#include <
zephyr/logging/log_instance.h
>
11
#include <
zephyr/logging/log_core.h
>
12
#include <
zephyr/sys/iterable_sections.h
>
13
14
#ifdef __cplusplus
15
extern
"C"
{
16
#endif
17
42
#define LOG_ERR(...) Z_LOG(LOG_LEVEL_ERR, __VA_ARGS__)
43
53
#define LOG_WRN(...) Z_LOG(LOG_LEVEL_WRN, __VA_ARGS__)
54
63
#define LOG_INF(...) Z_LOG(LOG_LEVEL_INF, __VA_ARGS__)
64
73
#define LOG_DBG(...) Z_LOG(LOG_LEVEL_DBG, __VA_ARGS__)
74
84
#define LOG_PRINTK(...) Z_LOG_PRINTK(0, __VA_ARGS__)
85
94
#define LOG_RAW(...) Z_LOG_PRINTK(1, __VA_ARGS__)
95
108
#define LOG_INST_ERR(_log_inst, ...) \
109
Z_LOG_INSTANCE(LOG_LEVEL_ERR, _log_inst, __VA_ARGS__)
110
124
#define LOG_INST_WRN(_log_inst, ...) \
125
Z_LOG_INSTANCE(LOG_LEVEL_WRN, _log_inst, __VA_ARGS__)
126
139
#define LOG_INST_INF(_log_inst, ...) \
140
Z_LOG_INSTANCE(LOG_LEVEL_INF, _log_inst, __VA_ARGS__)
141
154
#define LOG_INST_DBG(_log_inst, ...) \
155
Z_LOG_INSTANCE(LOG_LEVEL_DBG, _log_inst, __VA_ARGS__)
156
167
#define LOG_HEXDUMP_ERR(_data, _length, _str) \
168
Z_LOG_HEXDUMP(LOG_LEVEL_ERR, _data, _length, _str)
169
180
#define LOG_HEXDUMP_WRN(_data, _length, _str) \
181
Z_LOG_HEXDUMP(LOG_LEVEL_WRN, _data, _length, _str)
182
192
#define LOG_HEXDUMP_INF(_data, _length, _str) \
193
Z_LOG_HEXDUMP(LOG_LEVEL_INF, _data, _length, _str)
194
204
#define LOG_HEXDUMP_DBG(_data, _length, _str) \
205
Z_LOG_HEXDUMP(LOG_LEVEL_DBG, _data, _length, _str)
206
221
#define LOG_INST_HEXDUMP_ERR(_log_inst, _data, _length, _str) \
222
Z_LOG_HEXDUMP_INSTANCE(LOG_LEVEL_ERR, _log_inst, _data, _length, _str)
223
236
#define LOG_INST_HEXDUMP_WRN(_log_inst, _data, _length, _str) \
237
Z_LOG_HEXDUMP_INSTANCE(LOG_LEVEL_WRN, _log_inst, _data, _length, _str)
238
250
#define LOG_INST_HEXDUMP_INF(_log_inst, _data, _length, _str) \
251
Z_LOG_HEXDUMP_INSTANCE(LOG_LEVEL_INF, _log_inst, _data, _length, _str)
252
264
#define LOG_INST_HEXDUMP_DBG(_log_inst, _data, _length, _str) \
265
Z_LOG_HEXDUMP_INSTANCE(LOG_LEVEL_DBG, _log_inst, _data, _length, _str)
266
279
void
z_log_vprintk(
const
char
*fmt, va_list ap);
280
281
#ifdef __cplusplus
282
}
283
#define LOG_IN_CPLUSPLUS 1
284
#endif
285
/* Macro expects that optionally on second argument local log level is provided.
286
* If provided it is returned, otherwise default log level is returned or
287
* LOG_LEVEL, if it was locally defined.
288
*/
289
#if !defined(CONFIG_LOG)
290
#define _LOG_LEVEL_RESOLVE(...) LOG_LEVEL_NONE
291
#else
292
#define _LOG_LEVEL_RESOLVE(...) \
293
Z_LOG_EVAL(COND_CODE_0(LOG_LEVEL, (1), (LOG_LEVEL)), \
294
(GET_ARG_N(2, __VA_ARGS__, LOG_LEVEL)), \
295
(GET_ARG_N(2, __VA_ARGS__, CONFIG_LOG_DEFAULT_LEVEL)))
296
#endif
297
298
/* Return first argument */
299
#define _LOG_ARG1(arg1, ...) arg1
300
301
#define _LOG_MODULE_CONST_DATA_CREATE(_name, _level) \
302
IF_ENABLED(LOG_IN_CPLUSPLUS, (extern)) \
303
const STRUCT_SECTION_ITERABLE_ALTERNATE(log_const, \
304
log_source_const_data, \
305
Z_LOG_ITEM_CONST_DATA(_name)) = \
306
{ \
307
.name = STRINGIFY(_name), \
308
.level = _level \
309
}
310
311
#define _LOG_MODULE_DYNAMIC_DATA_CREATE(_name) \
312
STRUCT_SECTION_ITERABLE_ALTERNATE(log_dynamic, log_source_dynamic_data, \
313
LOG_ITEM_DYNAMIC_DATA(_name))
314
315
#define _LOG_MODULE_DYNAMIC_DATA_COND_CREATE(_name) \
316
IF_ENABLED(CONFIG_LOG_RUNTIME_FILTERING, \
317
(_LOG_MODULE_DYNAMIC_DATA_CREATE(_name);))
318
319
#define _LOG_MODULE_DATA_CREATE(_name, _level) \
320
_LOG_MODULE_CONST_DATA_CREATE(_name, _level); \
321
_LOG_MODULE_DYNAMIC_DATA_COND_CREATE(_name)
322
323
/* Determine if data for the module shall be created. It is created if logging
324
* is enabled, override level is set or module specific level is set (not off).
325
*/
326
#define Z_DO_LOG_MODULE_REGISTER(...) \
327
COND_CODE_1(CONFIG_LOG, \
328
(Z_LOG_EVAL(CONFIG_LOG_OVERRIDE_LEVEL, \
329
(1), \
330
(Z_LOG_EVAL(_LOG_LEVEL_RESOLVE(__VA_ARGS__), (1), (0))) \
331
)), (0))
332
364
#define LOG_MODULE_REGISTER(...) \
365
COND_CODE_1( \
366
Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__), \
367
(_LOG_MODULE_DATA_CREATE(GET_ARG_N(1, __VA_ARGS__), \
368
_LOG_LEVEL_RESOLVE(__VA_ARGS__))),\
369
() \
370
) \
371
LOG_MODULE_DECLARE(__VA_ARGS__)
372
399
#define LOG_MODULE_DECLARE(...) \
400
extern const struct log_source_const_data \
401
Z_LOG_ITEM_CONST_DATA(GET_ARG_N(1, __VA_ARGS__)); \
402
extern struct log_source_dynamic_data \
403
LOG_ITEM_DYNAMIC_DATA(GET_ARG_N(1, __VA_ARGS__)); \
404
\
405
static const struct log_source_const_data * \
406
__log_current_const_data __unused = \
407
Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__) ? \
408
&Z_LOG_ITEM_CONST_DATA(GET_ARG_N(1, __VA_ARGS__)) : \
409
NULL; \
410
\
411
static struct log_source_dynamic_data * \
412
__log_current_dynamic_data __unused = \
413
(Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__) && \
414
IS_ENABLED(CONFIG_LOG_RUNTIME_FILTERING)) ? \
415
&LOG_ITEM_DYNAMIC_DATA(GET_ARG_N(1, __VA_ARGS__)) : \
416
NULL; \
417
\
418
static const uint32_t __log_level __unused = \
419
_LOG_LEVEL_RESOLVE(__VA_ARGS__)
420
428
#define LOG_LEVEL_SET(level) static const uint32_t __log_level __unused = \
429
Z_LOG_RESOLVED_LEVEL(level, 0)
430
431
#ifdef CONFIG_LOG_CUSTOM_HEADER
432
/* This include must always be at the end of log.h */
433
#include <zephyr_custom_log.h>
434
#endif
435
436
/*
437
* Eclipse CDT or JetBrains Clion parser is sometimes confused by logging API
438
* code and freezes the whole IDE. Following lines hides LOG_x macros from them.
439
*/
440
#if defined(__CDT_PARSER__) || defined(__JETBRAINS_IDE__)
441
#undef LOG_ERR
442
#undef LOG_WRN
443
#undef LOG_INF
444
#undef LOG_DBG
445
446
#undef LOG_HEXDUMP_ERR
447
#undef LOG_HEXDUMP_WRN
448
#undef LOG_HEXDUMP_INF
449
#undef LOG_HEXDUMP_DBG
450
451
#define LOG_ERR(...) (void) 0
452
#define LOG_WRN(...) (void) 0
453
#define LOG_DBG(...) (void) 0
454
#define LOG_INF(...) (void) 0
455
456
#define LOG_HEXDUMP_ERR(...) (void) 0
457
#define LOG_HEXDUMP_WRN(...) (void) 0
458
#define LOG_HEXDUMP_DBG(...) (void) 0
459
#define LOG_HEXDUMP_INF(...) (void) 0
460
#endif
461
466
#endif
/* ZEPHYR_INCLUDE_LOGGING_LOG_H_ */
log_core.h
log_instance.h
iterable_sections.h
zephyr
logging
log.h
Generated on Fri Oct 20 2023 10:27:12 for Zephyr API Documentation by
1.9.6