Zephyr Project API
3.4.0
A Scalable Open Source RTOS
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(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
Z_LOG_EVAL(CONFIG_LOG_OVERRIDE_LEVEL, \
328
(1), \
329
(Z_LOG_EVAL(_LOG_LEVEL_RESOLVE(__VA_ARGS__), (1), (0))) \
330
)
331
363
#define LOG_MODULE_REGISTER(...) \
364
COND_CODE_1( \
365
Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__), \
366
(_LOG_MODULE_DATA_CREATE(GET_ARG_N(1, __VA_ARGS__), \
367
_LOG_LEVEL_RESOLVE(__VA_ARGS__))),\
368
() \
369
) \
370
LOG_MODULE_DECLARE(__VA_ARGS__)
371
398
#define LOG_MODULE_DECLARE(...) \
399
extern const struct log_source_const_data \
400
Z_LOG_ITEM_CONST_DATA(GET_ARG_N(1, __VA_ARGS__)); \
401
extern struct log_source_dynamic_data \
402
LOG_ITEM_DYNAMIC_DATA(GET_ARG_N(1, __VA_ARGS__)); \
403
\
404
static const struct log_source_const_data * \
405
__log_current_const_data __unused = \
406
Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__) ? \
407
&Z_LOG_ITEM_CONST_DATA(GET_ARG_N(1, __VA_ARGS__)) : \
408
NULL; \
409
\
410
static struct log_source_dynamic_data * \
411
__log_current_dynamic_data __unused = \
412
(Z_DO_LOG_MODULE_REGISTER(__VA_ARGS__) && \
413
IS_ENABLED(CONFIG_LOG_RUNTIME_FILTERING)) ? \
414
&LOG_ITEM_DYNAMIC_DATA(GET_ARG_N(1, __VA_ARGS__)) : \
415
NULL; \
416
\
417
static const uint32_t __log_level __unused = \
418
_LOG_LEVEL_RESOLVE(__VA_ARGS__)
419
427
#define LOG_LEVEL_SET(level) static const uint32_t __log_level __unused = \
428
Z_LOG_RESOLVED_LEVEL(level, 0)
429
430
#ifdef CONFIG_LOG_CUSTOM_HEADER
431
/* This include must always be at the end of log.h */
432
#include <zephyr_custom_log.h>
433
#endif
434
435
/*
436
* Eclipse CDT or JetBrains Clion parser is sometimes confused by logging API
437
* code and freezes the whole IDE. Following lines hides LOG_x macros from them.
438
*/
439
#if defined(__CDT_PARSER__) || defined(__JETBRAINS_IDE__)
440
#undef LOG_ERR
441
#undef LOG_WRN
442
#undef LOG_INF
443
#undef LOG_DBG
444
445
#undef LOG_HEXDUMP_ERR
446
#undef LOG_HEXDUMP_WRN
447
#undef LOG_HEXDUMP_INF
448
#undef LOG_HEXDUMP_DBG
449
450
#define LOG_ERR(...) (void) 0
451
#define LOG_WRN(...) (void) 0
452
#define LOG_DBG(...) (void) 0
453
#define LOG_INF(...) (void) 0
454
455
#define LOG_HEXDUMP_ERR(...) (void) 0
456
#define LOG_HEXDUMP_WRN(...) (void) 0
457
#define LOG_HEXDUMP_DBG(...) (void) 0
458
#define LOG_HEXDUMP_INF(...) (void) 0
459
#endif
460
465
#endif
/* ZEPHYR_INCLUDE_LOGGING_LOG_H_ */
log_core.h
log_instance.h
iterable_sections.h
include
zephyr
logging
log.h
Generated on Sat Jun 17 2023 07:48:28 for Zephyr Project API by
1.9.2