From 907d046c8929fb74e5a3502a9498198695e62ad8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Tue, 14 Jul 2015 08:43:55 +0200 Subject: [PATCH] log: allow filtering messages with a regexp pattern MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This allows printing/streaming/writing messages matching a specified basic regular expression only. Signed-off-by: Rafał Miłecki --- log/logread.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/log/logread.c b/log/logread.c index 6255408..dcf3c08 100644 --- a/log/logread.c +++ b/log/logread.c @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -57,7 +58,8 @@ static const struct blobmsg_policy log_policy[] = { static struct uloop_timeout retry; static struct uloop_fd sender; -static const char *log_file, *log_ip, *log_port, *log_prefix, *pid_file, *hostname; +static regex_t regexp_preg; +static const char *log_file, *log_ip, *log_port, *log_prefix, *pid_file, *hostname, *regexp_pattern; static int log_type = LOG_STDOUT; static int log_size, log_udp, log_follow, log_trailer_null = 0; @@ -128,6 +130,9 @@ static int log_notify(struct blob_attr *msg) } m = blobmsg_get_string(tb[LOG_MSG]); + if (regexp_pattern && + regexec(®exp_preg, m, 0, NULL, 0) == REG_NOMATCH) + return 0; t = blobmsg_get_u64(tb[LOG_TIME]) / 1000; c = ctime(&t); p = blobmsg_get_u32(tb[LOG_PRIO]); @@ -186,6 +191,7 @@ static int usage(const char *prog) "Options:\n" " -s Path to ubus socket\n" " -l Got only the last 'count' messages\n" + " -e Filter messages with a regexp\n" " -r Stream message to a server\n" " -F Log file\n" " -S Log size\n" @@ -235,7 +241,7 @@ int main(int argc, char **argv) signal(SIGPIPE, SIG_IGN); - while ((ch = getopt(argc, argv, "u0fcs:l:r:F:p:S:P:h:")) != -1) { + while ((ch = getopt(argc, argv, "u0fcs:l:r:F:p:S:P:h:e:")) != -1) { switch (ch) { case 'u': log_udp = 1; @@ -274,6 +280,11 @@ int main(int argc, char **argv) case 'h': hostname = optarg; break; + case 'e': + if (!regcomp(®exp_preg, optarg, REG_NOSUB)) { + regexp_pattern = optarg; + } + break; default: return usage(*argv); } -- 2.11.0