[PATCH] ubox: logread add option to filter priority (log level)
Paul D
newtwen at gmail.com
Mon Jul 24 03:19:02 PDT 2023
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.legale at 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);
More information about the openwrt-devel
mailing list