|
@@ -244,6 +244,7 @@ static char *get_log_buf(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+extern struct tm* localtime_r(const time_t* t, struct tm* r);
|
|
|
RT_WEAK rt_size_t ulog_formater(char *log_buf, rt_uint32_t level, const char *tag, rt_bool_t newline,
|
|
|
const char *format, va_list args)
|
|
|
{
|
|
@@ -439,6 +440,11 @@ void ulog_output_to_all_backend(rt_uint32_t level, const char *tag, rt_bool_t is
|
|
|
#if !defined(ULOG_USING_COLOR) || defined(ULOG_USING_SYSLOG)
|
|
|
backend->output(backend, level, tag, is_raw, log, size);
|
|
|
#else
|
|
|
+ if (backend->filter && backend->filter(backend, level, tag, is_raw, log, size) == RT_FALSE)
|
|
|
+ {
|
|
|
+ /* backend's filter is not match, so skip output */
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (backend->support_color || is_raw)
|
|
|
{
|
|
|
backend->output(backend, level, tag, is_raw, log, size);
|
|
@@ -447,7 +453,7 @@ void ulog_output_to_all_backend(rt_uint32_t level, const char *tag, rt_bool_t is
|
|
|
{
|
|
|
/* recalculate the log start address and log size when backend not supported color */
|
|
|
rt_size_t color_info_len = 0, output_size = size;
|
|
|
- char *output_log = log;
|
|
|
+ const char *output_log = log;
|
|
|
|
|
|
if (color_output_info[level] != RT_NULL)
|
|
|
color_info_len = rt_strlen(color_output_info[level]);
|
|
@@ -1300,6 +1306,41 @@ rt_err_t ulog_backend_unregister(ulog_backend_t backend)
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
|
|
|
+rt_err_t ulog_backend_set_filter(ulog_backend_t backend, ulog_backend_filter_t filter)
|
|
|
+{
|
|
|
+ rt_base_t level;
|
|
|
+ RT_ASSERT(backend);
|
|
|
+
|
|
|
+ level = rt_hw_interrupt_disable();
|
|
|
+ backend->filter = filter;
|
|
|
+ rt_hw_interrupt_enable(level);
|
|
|
+
|
|
|
+ return RT_EOK;
|
|
|
+}
|
|
|
+
|
|
|
+ulog_backend_t ulog_backend_find(const char *name)
|
|
|
+{
|
|
|
+ rt_base_t level;
|
|
|
+ rt_slist_t *node;
|
|
|
+ ulog_backend_t backend;
|
|
|
+
|
|
|
+ RT_ASSERT(ulog.init_ok);
|
|
|
+
|
|
|
+ level = rt_hw_interrupt_disable();
|
|
|
+ for (node = rt_slist_first(&ulog.backend_list); node; node = rt_slist_next(node))
|
|
|
+ {
|
|
|
+ backend = rt_slist_entry(node, struct ulog_backend, list);
|
|
|
+ if (rt_strncmp(backend->name, name, RT_NAME_MAX) == 0)
|
|
|
+ {
|
|
|
+ rt_hw_interrupt_enable(level);
|
|
|
+ return backend;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rt_hw_interrupt_enable(level);
|
|
|
+ return RT_NULL;
|
|
|
+}
|
|
|
+
|
|
|
#ifdef ULOG_USING_ASYNC_OUTPUT
|
|
|
/**
|
|
|
* asynchronous output logs to all backends
|