For those executing this at the command line, how does one 'repeat'?

-v 1 -v 2, or -v1 -v2 or -v123 or -v 1,2,3?

I had to think for a bit since it wasn't immediately obvious.

Perhaps a hint string with "(repeatable eg -v 1 -v 2)"?



On 2023-07-22 14:40, Legale Legale wrote:
 From 071cfc2853dd7a4f9fb59a1650de8d5c874ce4f2 Mon Sep 17 00:00:00 2001
From:
Date: Sat, 22 Jul 2023 01:28:05 +0300
Subject: [PATCH] logread: add option to filter priority (log level)

This adds an ability to filter log messages priority:
         -v      <log level>     handle only messages with given log
level (0-7), repeatable
         -V      <log level>     ignore messages with given log level
(0-7), repeatable

Signed-off-by: Isaev Ruslan <legale.leg...@gmail.com>
---
  log/logread.c | 27 ++++++++++++++++++++++++++-
  1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/log/logread.c b/log/logread.c
index f48dd4b..91aae00 100644
--- a/log/logread.c
+++ b/log/logread.c
@@ -66,6 +66,8 @@ static int log_type = LOG_STDOUT;
  static int log_size, log_udp, log_follow, log_trailer_null = 0;
  static int log_timestamp;
  static int logd_conn_tries = LOGD_CONNECT_RETRY;
+static int loglevel_include;
+static int loglevel_exclude;
  static int facility_include;
  static int facility_exclude;

@@ -79,6 +81,16 @@ static int check_facility_filter(int f)
         return 1;
  }

+/* check for loglevel filter; return 0 if message shall be dropped */
+static int check_loglevel_filter(int f)
+{
+       if (loglevel_include)
+               return !!(loglevel_include & (1 << f));
+       if (loglevel_exclude)
+               return !(loglevel_exclude & (1 << f));
+       return 1;
+}
+
  static const char* getcodetext(int value, CODE *codetable) {
         CODE *i;

@@ -155,6 +167,9 @@ static int log_notify(struct blob_attr *msg)

         if (!check_facility_filter(LOG_FAC(p)))
                         return 0;
+
+  if (!check_loglevel_filter(LOG_PRI(p)))
+    return 0;

         m = blobmsg_get_string(tb[LOG_MSG]);
         if (regexp_pattern &&
@@ -233,6 +248,8 @@ static int usage(const char *prog)
                 "    -p <file>          PID file\n"
                 "    -h <hostname>      Add hostname to the message\n"
                 "    -P <prefix>        Prefix custom text to streamed
messages\n"
+               "    -v <log level>     handle only messages with
given log level (0-7), repeatable\n"
+               "    -V <log level>     ignore messages with given log
level (0-7), repeatable\n"
                 "    -z <facility>      handle only messages with
given facility (0-23), repeatable\n"
                 "    -Z <facility>      ignore messages with given
facility (0-23), repeatable\n"
                 "    -f                 Follow log messages\n"
@@ -313,7 +330,7 @@ int main(int argc, char **argv)

         signal(SIGPIPE, SIG_IGN);

-       while ((ch = getopt(argc, argv, "u0fcs:l:z:Z:r:F:p:S:P:h:e:t")) != -1) {
+       while ((ch = getopt(argc, argv,
"u0fcs:l:v:V:z:Z:r:F:p:S:P:h:e:t")) != -1) {
                 switch (ch) {
                 case 'u':
                         log_udp = 1;
@@ -343,6 +360,14 @@ int main(int argc, char **argv)
                 case 'l':
                         lines = atoi(optarg);
                         break;
+               case 'v':
+                       id = strtoul(optarg, NULL, 0) & 0x1f;
+                       loglevel_include |= (1 << id);
+                       break;
+               case 'V':
+                       id = strtoul(optarg, NULL, 0) & 0x1f;
+                       loglevel_exclude |= (1 << id);
+                       break;
                 case 'z':
                         id = strtoul(optarg, NULL, 0) & 0x1f;
                         facility_include |= (1 << id);


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to