summaryrefslogtreecommitdiff
path: root/common/log.c
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2025-01-17 01:09:53 +0100
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2025-01-26 11:06:56 +0100
commitcb43e3e427769f5dcbb1ffda155198f38fb7375c (patch)
treec1863bb5717702656d9fcf338fb37eb79ce0c036 /common/log.c
parent1daacb92757e0c2e7b5155613ad9b1334545eb86 (diff)
log: enable filtering on functions
Up to now we could only use log level, category, and file for filtering. Allow filtering on a list of functions. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Diffstat (limited to 'common/log.c')
-rw-r--r--common/log.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/common/log.c b/common/log.c
index b2b5f3c81ba..b75e404420b 100644
--- a/common/log.c
+++ b/common/log.c
@@ -192,6 +192,10 @@ static bool log_passes_filters(struct log_device *ldev, struct log_rec *rec)
!log_has_member(filt->file_list, rec->file))
continue;
+ if (filt->func_list &&
+ !log_has_member(filt->func_list, rec->func))
+ continue;
+
if (filt->flags & LOGFF_DENY)
return false;
else
@@ -329,7 +333,7 @@ int _log_buffer(enum log_category_t cat, enum log_level_t level,
int log_add_filter_flags(const char *drv_name, enum log_category_t cat_list[],
enum log_level_t level, const char *file_list,
- int flags)
+ const char *func_list, int flags)
{
struct log_filter *filt;
struct log_device *ldev;
@@ -364,6 +368,13 @@ int log_add_filter_flags(const char *drv_name, enum log_category_t cat_list[],
goto err;
}
}
+ if (func_list) {
+ filt->func_list = strdup(func_list);
+ if (!filt->func_list) {
+ ret = -ENOMEM;
+ goto err;
+ }
+ }
filt->filter_num = ldev->next_filter_num++;
/* Add deny filters to the beginning of the list */
if (flags & LOGFF_DENY)