logging: add frontend calls in log_core

Call frontend instead of processing if CONFIG_LOG_FRONTEND is enabled.

Signed-off-by: Marcin Szymczyk <Marcin.Szymczyk@nordicsemi.no>
This commit is contained in:
Marcin Szymczyk 2019-06-13 15:00:51 +02:00 committed by Carles Cufí
commit a0c0996170
2 changed files with 81 additions and 37 deletions

View file

@ -14,6 +14,7 @@ if LOG
config LOG_RUNTIME_FILTERING config LOG_RUNTIME_FILTERING
bool "Enable runtime reconfiguration of the logger" bool "Enable runtime reconfiguration of the logger"
depends on !LOG_FRONTEND
help help
Allow runtime configuration of maximal, independent severity Allow runtime configuration of maximal, independent severity
level for instance. level for instance.
@ -68,6 +69,7 @@ config LOG_MAX_LEVEL
- 4 DEBUG, maximal level set to LOG_LEVEL_DBG - 4 DEBUG, maximal level set to LOG_LEVEL_DBG
menu "Prepend log message with function name" menu "Prepend log message with function name"
depends on !LOG_FRONTEND
config LOG_FUNC_NAME_PREFIX_ERR config LOG_FUNC_NAME_PREFIX_ERR
bool "Error messages prepended" bool "Error messages prepended"
@ -223,6 +225,14 @@ config LOG_CMDS
depends on SHELL depends on SHELL
default y if SHELL default y if SHELL
config LOG_FRONTEND
bool "Enable frontend"
default n
select LOG_IMMEDIATE
help
When enabled, logs are redirected to a custom frontend instead
of being processed by the logger.
config LOG_BACKEND_UART config LOG_BACKEND_UART
bool "Enable UART backend" bool "Enable UART backend"
depends on UART_CONSOLE depends on UART_CONSOLE

View file

@ -14,6 +14,7 @@
#include <assert.h> #include <assert.h>
#include <sys/atomic.h> #include <sys/atomic.h>
#include <ctype.h> #include <ctype.h>
#include <logging/log_frontend.h>
LOG_MODULE_REGISTER(log); LOG_MODULE_REGISTER(log);
@ -217,24 +218,32 @@ static inline void msg_finalize(struct log_msg *msg,
void log_0(const char *str, struct log_msg_ids src_level) void log_0(const char *str, struct log_msg_ids src_level)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_0(str, src_level);
} else {
struct log_msg *msg = log_msg_create_0(str); struct log_msg *msg = log_msg_create_0(str);
if (msg == NULL) { if (msg == NULL) {
return; return;
} }
msg_finalize(msg, src_level); msg_finalize(msg, src_level);
}
} }
void log_1(const char *str, void log_1(const char *str,
log_arg_t arg0, log_arg_t arg0,
struct log_msg_ids src_level) struct log_msg_ids src_level)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_1(str, arg0, src_level);
} else {
struct log_msg *msg = log_msg_create_1(str, arg0); struct log_msg *msg = log_msg_create_1(str, arg0);
if (msg == NULL) { if (msg == NULL) {
return; return;
} }
msg_finalize(msg, src_level); msg_finalize(msg, src_level);
}
} }
void log_2(const char *str, void log_2(const char *str,
@ -242,6 +251,9 @@ void log_2(const char *str,
log_arg_t arg1, log_arg_t arg1,
struct log_msg_ids src_level) struct log_msg_ids src_level)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_2(str, arg0, arg1, src_level);
} else {
struct log_msg *msg = log_msg_create_2(str, arg0, arg1); struct log_msg *msg = log_msg_create_2(str, arg0, arg1);
if (msg == NULL) { if (msg == NULL) {
@ -249,6 +261,7 @@ void log_2(const char *str,
} }
msg_finalize(msg, src_level); msg_finalize(msg, src_level);
}
} }
void log_3(const char *str, void log_3(const char *str,
@ -257,6 +270,9 @@ void log_3(const char *str,
log_arg_t arg2, log_arg_t arg2,
struct log_msg_ids src_level) struct log_msg_ids src_level)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_3(str, arg0, arg1, arg2, src_level);
} else {
struct log_msg *msg = log_msg_create_3(str, arg0, arg1, arg2); struct log_msg *msg = log_msg_create_3(str, arg0, arg1, arg2);
if (msg == NULL) { if (msg == NULL) {
@ -264,6 +280,7 @@ void log_3(const char *str,
} }
msg_finalize(msg, src_level); msg_finalize(msg, src_level);
}
} }
void log_n(const char *str, void log_n(const char *str,
@ -271,6 +288,9 @@ void log_n(const char *str,
u32_t narg, u32_t narg,
struct log_msg_ids src_level) struct log_msg_ids src_level)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_n(str, args, narg, src_level);
} else {
struct log_msg *msg = log_msg_create_n(str, args, narg); struct log_msg *msg = log_msg_create_n(str, args, narg);
if (msg == NULL) { if (msg == NULL) {
@ -278,6 +298,7 @@ void log_n(const char *str,
} }
msg_finalize(msg, src_level); msg_finalize(msg, src_level);
}
} }
void log_hexdump(const char *str, void log_hexdump(const char *str,
@ -285,6 +306,9 @@ void log_hexdump(const char *str,
u32_t length, u32_t length,
struct log_msg_ids src_level) struct log_msg_ids src_level)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_hexdump(str, data, length, src_level);
} else {
struct log_msg *msg = log_msg_hexdump_create(str, data, length); struct log_msg *msg = log_msg_hexdump_create(str, data, length);
if (msg == NULL) { if (msg == NULL) {
@ -292,6 +316,7 @@ void log_hexdump(const char *str,
} }
msg_finalize(msg, src_level); msg_finalize(msg, src_level);
}
} }
int log_printk(const char *fmt, va_list ap) int log_printk(const char *fmt, va_list ap)
@ -350,7 +375,8 @@ static u32_t count_args(const char *fmt)
void log_generic(struct log_msg_ids src_level, const char *fmt, va_list ap) void log_generic(struct log_msg_ids src_level, const char *fmt, va_list ap)
{ {
if (IS_ENABLED(CONFIG_LOG_IMMEDIATE)) { if (IS_ENABLED(CONFIG_LOG_IMMEDIATE) &&
(!IS_ENABLED(CONFIG_LOG_FRONTEND))) {
struct log_backend const *backend; struct log_backend const *backend;
u32_t timestamp = timestamp_func(); u32_t timestamp = timestamp_func();
@ -388,6 +414,9 @@ void log_string_sync(struct log_msg_ids src_level, const char *fmt, ...)
void log_hexdump_sync(struct log_msg_ids src_level, const char *metadata, void log_hexdump_sync(struct log_msg_ids src_level, const char *metadata,
const u8_t *data, u32_t len) const u8_t *data, u32_t len)
{ {
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_hexdump(metadata, data, len, src_level);
} else {
struct log_backend const *backend; struct log_backend const *backend;
u32_t timestamp = timestamp_func(); u32_t timestamp = timestamp_func();
@ -400,6 +429,7 @@ void log_hexdump_sync(struct log_msg_ids src_level, const char *metadata,
data, len); data, len);
} }
} }
}
} }
static u32_t timestamp_get(void) static u32_t timestamp_get(void)
@ -455,6 +485,10 @@ void log_init(void)
assert(log_backend_count_get() < LOG_FILTERS_NUM_OF_SLOTS); assert(log_backend_count_get() < LOG_FILTERS_NUM_OF_SLOTS);
int i; int i;
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
log_frontend_init();
}
if (atomic_inc(&initialized) != 0) { if (atomic_inc(&initialized) != 0) {
return; return;
} }