Zephyr API Documentation
3.6.0
A Scalable Open Source RTOS
3.6.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(CONFIG_LOG_FMT_SECTION, ( \
303
static const char UTIL_CAT(_name, _str)[] \
304
__in_section(_log_strings, static, _CONCAT(_name, _)) __used __noasan = \
305
STRINGIFY(_name);)) \
306
IF_ENABLED(LOG_IN_CPLUSPLUS, (extern)) \
307
const STRUCT_SECTION_ITERABLE_ALTERNATE(log_const, \
308
log_source_const_data, \
309
Z_LOG_ITEM_CONST_DATA(_name)) = \
310
{ \
311
.name = COND_CODE_1(CONFIG_LOG_FMT_SECTION, \
312
(UTIL_CAT(_name, _str)), (STRINGIFY(_name))), \
313
.level = _level \
314
}
315
316
#define _LOG_MODULE_DYNAMIC_DATA_CREATE(_name) \
317
STRUCT_SECTION_ITERABLE_ALTERNATE(log_dynamic, log_source_dynamic_data, \
318
LOG_ITEM_DYNAMIC_DATA(_name))
319
320
#define _LOG_MODULE_DYNAMIC_DATA_COND_CREATE(_name) \
321
IF_ENABLED(CONFIG_LOG_RUNTIME_FILTERING, \
322
(_LOG_MODULE_DYNAMIC_DATA_CREATE(_name);))
323
324
#define _LOG_MODULE_DATA_CREATE(_name, _level) \
325
_LOG_MODULE_CONST_DATA_CREATE(_name, _level); \
326
_LOG_MODULE_DYNAMIC_DATA_COND_CREATE(_name)
327
328
/* Determine if data for the module shall be created. It is created if logging
329
* is enabled, override level is set or module specific level is set (not off).
330
*/
331
#define Z_DO_LOG_MODULE_REGISTER(...) \
332
COND_CODE_1(CONFIG_LOG, \
333
(Z_LOG_EVAL(CONFIG_LOG_OVERRIDE_LEVEL, \
334
(1), \
335
(Z_LOG_EVAL(_LOG_LEVEL_RESOLVE(__VA_ARGS__), (1), (0))) \
336
)), (0))
337
369
#define LOG_MODULE_REGISTER(...) \
370
COND_CODE_1( \
371
Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__), \
372
(_LOG_MODULE_DATA_CREATE(GET_ARG_N(1, __VA_ARGS__), \
373
_LOG_LEVEL_RESOLVE(__VA_ARGS__))),\
374
() \
375
) \
376
LOG_MODULE_DECLARE(__VA_ARGS__)
377
404
#define LOG_MODULE_DECLARE(...) \
405
extern const struct log_source_const_data \
406
Z_LOG_ITEM_CONST_DATA(GET_ARG_N(1, __VA_ARGS__)); \
407
extern struct log_source_dynamic_data \
408
LOG_ITEM_DYNAMIC_DATA(GET_ARG_N(1, __VA_ARGS__)); \
409
\
410
static const struct log_source_const_data * \
411
__log_current_const_data __unused = \
412
Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__) ? \
413
&Z_LOG_ITEM_CONST_DATA(GET_ARG_N(1, __VA_ARGS__)) : \
414
NULL; \
415
\
416
static struct log_source_dynamic_data * \
417
__log_current_dynamic_data __unused = \
418
(Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__) && \
419
IS_ENABLED(CONFIG_LOG_RUNTIME_FILTERING)) ? \
420
&LOG_ITEM_DYNAMIC_DATA(GET_ARG_N(1, __VA_ARGS__)) : \
421
NULL; \
422
\
423
static const uint32_t __log_level __unused = \
424
_LOG_LEVEL_RESOLVE(__VA_ARGS__)
425
433
#define LOG_LEVEL_SET(level) static const uint32_t __log_level __unused = \
434
Z_LOG_RESOLVED_LEVEL(level, 0)
435
436
#ifdef CONFIG_LOG_CUSTOM_HEADER
437
/* This include must always be at the end of log.h */
438
#include <zephyr_custom_log.h>
439
#endif
440
441
/*
442
* Eclipse CDT or JetBrains Clion parser is sometimes confused by logging API
443
* code and freezes the whole IDE. Following lines hides LOG_x macros from them.
444
*/
445
#if defined(__CDT_PARSER__) || defined(__JETBRAINS_IDE__)
446
#undef LOG_ERR
447
#undef LOG_WRN
448
#undef LOG_INF
449
#undef LOG_DBG
450
451
#undef LOG_HEXDUMP_ERR
452
#undef LOG_HEXDUMP_WRN
453
#undef LOG_HEXDUMP_INF
454
#undef LOG_HEXDUMP_DBG
455
456
#define LOG_ERR(...) (void) 0
457
#define LOG_WRN(...) (void) 0
458
#define LOG_DBG(...) (void) 0
459
#define LOG_INF(...) (void) 0
460
461
#define LOG_HEXDUMP_ERR(...) (void) 0
462
#define LOG_HEXDUMP_WRN(...) (void) 0
463
#define LOG_HEXDUMP_DBG(...) (void) 0
464
#define LOG_HEXDUMP_INF(...) (void) 0
465
#endif
466
471
#endif
/* ZEPHYR_INCLUDE_LOGGING_LOG_H_ */
log_core.h
log_instance.h
iterable_sections.h
zephyr
logging
log.h
Generated on Sat Feb 24 2024 03:45:05 for Zephyr API Documentation by
1.9.6