Zephyr Project API 4.0.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
log_output.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#ifndef ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_H_
7#define ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_H_
8
10#include <zephyr/sys/util.h>
11#include <stdarg.h>
12#include <zephyr/sys/atomic.h>
13#include <zephyr/kernel.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
33#define LOG_OUTPUT_FLAG_COLORS BIT(0)
34
36#define LOG_OUTPUT_FLAG_TIMESTAMP BIT(1)
37
39#define LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP BIT(2)
40
42#define LOG_OUTPUT_FLAG_LEVEL BIT(3)
43
45#define LOG_OUTPUT_FLAG_CRLF_NONE BIT(4)
46
48#define LOG_OUTPUT_FLAG_CRLF_LFONLY BIT(5)
49
52#define LOG_OUTPUT_FLAG_FORMAT_SYSLOG BIT(6)
53
55#define LOG_OUTPUT_FLAG_THREAD BIT(7)
56
58#define LOG_OUTPUT_FLAG_SKIP_SOURCE BIT(8)
59
65#define LOG_OUTPUT_TEXT 0
66
67#define LOG_OUTPUT_SYST 1
68
69#define LOG_OUTPUT_DICT 2
70
71#define LOG_OUTPUT_CUSTOM 3
72
86typedef int (*log_output_func_t)(uint8_t *buf, size_t size, void *ctx);
87
88/* @brief Control block structure for log_output instance. */
94
102
112typedef void (*log_format_func_t)(const struct log_output *output,
113 struct log_msg *msg, uint32_t flags);
114
119
127#define LOG_OUTPUT_DEFINE(_name, _func, _buf, _size) \
128 static struct log_output_control_block _name##_control_block; \
129 static const struct log_output _name = { \
130 .func = _func, \
131 .control_block = &_name##_control_block, \
132 .buf = _buf, \
133 .size = _size, \
134 }
135
146 struct log_msg *msg, uint32_t flags);
147
162 log_timestamp_t timestamp,
163 const char *domain,
164 const char *source,
165 k_tid_t tid,
166 uint8_t level,
167 const uint8_t *package,
168 const uint8_t *data,
169 size_t data_len,
171
182 struct log_msg *msg, uint32_t flags);
183
191void log_output_dropped_process(const struct log_output *output, uint32_t cnt);
192
200static inline void log_output_write(log_output_func_t outf, uint8_t *buf, size_t len, void *ctx)
201{
202 int processed;
203
204 while (len != 0) {
205 processed = outf(buf, len, ctx);
206 len -= processed;
207 buf += processed;
208 }
209}
210
215static inline void log_output_flush(const struct log_output *output)
216{
217 log_output_write(output->func, output->buf, output->control_block->offset,
218 output->control_block->ctx);
219 output->control_block->offset = 0;
220}
221
227static inline void log_output_ctx_set(const struct log_output *output,
228 void *ctx)
229{
230 output->control_block->ctx = ctx;
231}
232
238static inline void log_output_hostname_set(const struct log_output *output,
239 const char *hostname)
240{
241 output->control_block->hostname = hostname;
242}
243
249
257
263#ifdef __cplusplus
264}
265#endif
266
267#endif /* ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_H_ */
long atomic_t
Definition atomic_types.h:15
void log_output_dropped_process(const struct log_output *output, uint32_t cnt)
Process dropped messages indication.
void log_output_process(const struct log_output *log_output, log_timestamp_t timestamp, const char *domain, const char *source, k_tid_t tid, uint8_t level, const uint8_t *package, const uint8_t *data, size_t data_len, uint32_t flags)
Process input data to a readable string.
void(* log_format_func_t)(const struct log_output *output, struct log_msg *msg, uint32_t flags)
Typedef of the function pointer table "format_table".
Definition log_output.h:112
static void log_output_write(log_output_func_t outf, uint8_t *buf, size_t len, void *ctx)
Write to the output buffer.
Definition log_output.h:200
static void log_output_hostname_set(const struct log_output *output, const char *hostname)
Function for setting hostname of this device.
Definition log_output.h:238
void log_output_timestamp_freq_set(uint32_t freq)
Set timestamp frequency.
void log_output_msg_process(const struct log_output *log_output, struct log_msg *msg, uint32_t flags)
Process log messages v2 to readable strings.
uint64_t log_output_timestamp_to_us(log_timestamp_t timestamp)
Convert timestamp of the message to us.
static void log_output_ctx_set(const struct log_output *output, void *ctx)
Function for setting user context passed to the output function.
Definition log_output.h:227
log_format_func_t log_format_func_t_get(uint32_t log_type)
Declaration of the get routine for function pointer table format_table.
void log_output_msg_syst_process(const struct log_output *log_output, struct log_msg *msg, uint32_t flags)
Process log messages v2 to SYS-T format.
static void log_output_flush(const struct log_output *output)
Flush output buffer.
Definition log_output.h:215
int(* log_output_func_t)(uint8_t *buf, size_t size, void *ctx)
Prototype of the function processing output data.
Definition log_output.h:86
Public kernel APIs.
uint32_t log_timestamp_t
Definition log_msg.h:36
flags
Definition parser.h:96
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Thread Structure.
Definition thread.h:259
Definition log_msg.h:94
uint8_t data[]
Definition log_msg.h:100
Definition log_output.h:89
atomic_t offset
Definition log_output.h:90
const char * hostname
Definition log_output.h:92
void * ctx
Definition log_output.h:91
Log_output instance structure.
Definition log_output.h:96
struct log_output_control_block * control_block
Definition log_output.h:98
log_output_func_t func
Definition log_output.h:97
uint8_t * buf
Definition log_output.h:99
size_t size
Definition log_output.h:100
Misc utilities.