6f0dbde58a
Resolves: RHEL-12783 RHEL-14612 RHEL-16048 RHEL-16071 RHEL-21257
102 lines
3.1 KiB
Diff
102 lines
3.1 KiB
Diff
From 735d815603ac1f8575bddf92d37eb60fcd6d0766 Mon Sep 17 00:00:00 2001
|
|
From: Karel Zak <kzak@redhat.com>
|
|
Date: Tue, 1 Nov 2022 10:30:06 +0100
|
|
Subject: logger: always update header when read from stdin
|
|
|
|
The current code updates the header only when the priority has been
|
|
changed. It's incorrect because wanted is a valid header or each entry
|
|
(don't forget that logger for stdin use-case is used in pipe to log
|
|
long-time running processes).
|
|
|
|
This patch also fixes the initial timestamp; it was originally generated
|
|
on logger startup, it now generates the header on the first message.
|
|
|
|
$ (sleep 2; date; sleep 2; date; sleep 2; date) | logger --stderr --no-act
|
|
|
|
old:
|
|
<13>Nov 1 10:42:14 kzak: Tue Nov 1 10:42:16 AM CET 2022
|
|
<13>Nov 1 10:42:14 kzak: Tue Nov 1 10:42:18 AM CET 2022
|
|
<13>Nov 1 10:42:14 kzak: Tue Nov 1 10:42:20 AM CET 2022
|
|
|
|
new:
|
|
<13>Nov 1 10:19:02 kzak: Tue Nov 1 10:19:02 AM CET 2022
|
|
<13>Nov 1 10:19:04 kzak: Tue Nov 1 10:19:04 AM CET 2022
|
|
<13>Nov 1 10:19:06 kzak: Tue Nov 1 10:19:06 AM CET 2022
|
|
|
|
Addresses: https://issues.redhat.com/browse/RHEL-21257
|
|
Upstream: http://github.com/util-linux/util-linux/commit/96ccdc00e1fcf1684f9734a189baf90e00ff0c9a
|
|
Fixes: https://github.com/util-linux/util-linux/issues/1866
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
---
|
|
misc-utils/logger.c | 19 +++++--------------
|
|
1 file changed, 5 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/misc-utils/logger.c b/misc-utils/logger.c
|
|
index cdce019d5..53ff03ff6 100644
|
|
--- a/misc-utils/logger.c
|
|
+++ b/misc-utils/logger.c
|
|
@@ -920,8 +920,6 @@ static void logger_open(struct logger_ctl *ctl)
|
|
ctl->tag = xgetlogin();
|
|
if (!ctl->tag)
|
|
ctl->tag = "<someone>";
|
|
-
|
|
- generate_syslog_header(ctl);
|
|
}
|
|
|
|
/* re-open; usually after failed connection */
|
|
@@ -971,11 +969,8 @@ static void logger_stdin(struct logger_ctl *ctl)
|
|
{
|
|
/* note: we re-generate the syslog header for each log message to
|
|
* update header timestamps and to reflect possible priority changes.
|
|
- * The initial header is generated by logger_open().
|
|
*/
|
|
- int has_header = 1;
|
|
int default_priority = ctl->pri;
|
|
- int last_pri = default_priority;
|
|
char *buf = xmalloc(ctl->max_message_size + 2 + 2);
|
|
int pri;
|
|
int c;
|
|
@@ -1002,10 +997,6 @@ static void logger_stdin(struct logger_ctl *ctl)
|
|
} else
|
|
ctl->pri = default_priority;
|
|
|
|
- if (ctl->pri != last_pri) {
|
|
- generate_syslog_header(ctl);
|
|
- last_pri = ctl->pri;
|
|
- }
|
|
if (c != EOF && c != '\n')
|
|
c = getchar();
|
|
}
|
|
@@ -1017,10 +1008,8 @@ static void logger_stdin(struct logger_ctl *ctl)
|
|
buf[i] = '\0';
|
|
|
|
if (i > 0 || !ctl->skip_empty_lines) {
|
|
- if (!has_header)
|
|
- generate_syslog_header(ctl);
|
|
+ generate_syslog_header(ctl);
|
|
write_output(ctl, buf);
|
|
- has_header = 0;
|
|
}
|
|
|
|
if (c == '\n') /* discard line terminator */
|
|
@@ -1296,12 +1285,14 @@ int main(int argc, char **argv)
|
|
abort();
|
|
}
|
|
logger_open(&ctl);
|
|
- if (0 < argc)
|
|
+ if (0 < argc) {
|
|
+ generate_syslog_header(&ctl);
|
|
logger_command_line(&ctl, argv);
|
|
- else
|
|
+ } else
|
|
/* Note. --file <arg> reopens stdin making the below
|
|
* function to be used for file inputs. */
|
|
logger_stdin(&ctl);
|
|
+
|
|
logger_close(&ctl);
|
|
return EXIT_SUCCESS;
|
|
}
|
|
--
|
|
2.43.0
|
|
|