When running multiple instances of ptp4l or phc2sys, it's difficult to
tell which log message belongs to which instance. Add new options to
ptp4l and phc2sys which can specify a prefix for all messages printed to
the standard output or system log, so messages from different instances
can have different prefixes.

Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
---
 config.c  |  1 +
 phc2sys.8 |  4 ++++
 phc2sys.c |  9 +++++++--
 print.c   | 18 ++++++++++++++----
 print.h   |  1 +
 ptp4l.8   | 10 ++++++++++
 ptp4l.c   |  8 +++++++-
 7 files changed, 44 insertions(+), 7 deletions(-)

diff --git a/config.c b/config.c
index 5da5ecc..89e349e 100644
--- a/config.c
+++ b/config.c
@@ -199,6 +199,7 @@ struct config_item config_tab[] = {
        PORT_ITEM_INT("logMinPdelayReqInterval", 0, INT8_MIN, INT8_MAX),
        PORT_ITEM_INT("logSyncInterval", 0, INT8_MIN, INT8_MAX),
        GLOB_ITEM_INT("logging_level", LOG_INFO, PRINT_LEVEL_MIN, 
PRINT_LEVEL_MAX),
+       GLOB_ITEM_STR("logging_prefix", NULL),
        GLOB_ITEM_STR("manufacturerIdentity", "00:00:00"),
        GLOB_ITEM_INT("max_frequency", 900000000, 0, INT_MAX),
        PORT_ITEM_INT("min_neighbor_prop_delay", -20000000, INT_MIN, -1),
diff --git a/phc2sys.8 b/phc2sys.8
index 22d02c2..e515bd1 100644
--- a/phc2sys.8
+++ b/phc2sys.8
@@ -206,6 +206,10 @@ The default is /var/run/ptp4l.
 Set the maximum syslog level of messages which should be printed or sent to
 the system logger. The default is 6 (LOG_INFO).
 .TP
+.BI \-o " print-prefix"
+Specifies a prefix for messages printed to the standard output or system log.
+The default is empty string.
+.TP
 .B \-m
 Print messages to the standard output.
 .TP
diff --git a/phc2sys.c b/phc2sys.c
index 35cf6fa..a37e9bc 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -1209,6 +1209,7 @@ static void usage(char *progname)
                " -x             apply leap seconds by servo instead of 
kernel\n"
                " -z [path]      server address for UDS (/var/run/ptp4l)\n"
                " -l [num]       set the logging level to 'num' (6)\n"
+               " -o [prefix]    set prefix for log messages\n"
                " -m             print messages to stdout\n"
                " -q             do not print messages to the syslog\n"
                " -v             prints the software version and exits\n"
@@ -1219,7 +1220,7 @@ static void usage(char *progname)
 
 int main(int argc, char *argv[])
 {
-       char *progname;
+       char *progname, *prefix = NULL;
        char *src_name = NULL, *dst_name = NULL;
        struct clock *src, *dst;
        struct config *cfg;
@@ -1251,7 +1252,7 @@ int main(int argc, char *argv[])
        progname = strrchr(argv[0], '/');
        progname = progname ? 1+progname : argv[0];
        while (EOF != (c = getopt(argc, argv,
-                                 
"arc:d:s:E:P:I:S:F:R:N:O:L:M:i:u:wn:xz:l:mqvh"))) {
+                                 
"arc:d:s:E:P:I:S:F:R:N:O:L:M:i:u:wn:xz:l:o:mqvh"))) {
                switch (c) {
                case 'a':
                        autocfg = 1;
@@ -1363,6 +1364,9 @@ int main(int argc, char *argv[])
                                          PRINT_LEVEL_MIN, PRINT_LEVEL_MAX))
                                goto end;
                        break;
+               case 'o':
+                       prefix = optarg;
+                       break;
                case 'm':
                        verbose = 1;
                        break;
@@ -1405,6 +1409,7 @@ int main(int argc, char *argv[])
        }
 
        print_set_progname(progname);
+       print_set_prefix(prefix);
        print_set_verbose(verbose);
        print_set_syslog(use_syslog);
        print_set_level(print_level);
diff --git a/print.c b/print.c
index a82d0e7..c1dd867 100644
--- a/print.c
+++ b/print.c
@@ -28,12 +28,18 @@ static int verbose = 0;
 static int print_level = LOG_INFO;
 static int use_syslog = 1;
 static const char *progname;
+static const char *prefix;
 
 void print_set_progname(const char *name)
 {
        progname = name;
 }
 
+void print_set_prefix(const char *string)
+{
+       prefix = string;
+}
+
 void print_set_syslog(int value)
 {
        use_syslog = value ? 1 : 0;
@@ -67,13 +73,17 @@ void print(int level, char const *format, ...)
 
        if (verbose) {
                f = level >= LOG_NOTICE ? stdout : stderr;
-               fprintf(f, "%s[%ld.%03ld]: %s\n",
+               fprintf(f, "%s[%ld.%03ld]: %s%s%s\n",
                        progname ? progname : "",
-                       ts.tv_sec, ts.tv_nsec / 1000000, buf);
+                       ts.tv_sec, ts.tv_nsec / 1000000,
+                       prefix ? prefix : "", prefix ? " " : "",
+                       buf);
                fflush(f);
        }
        if (use_syslog) {
-               syslog(level, "[%ld.%03ld] %s",
-                      ts.tv_sec, ts.tv_nsec / 1000000, buf);
+               syslog(level, "[%ld.%03ld] %s%s%s",
+                      ts.tv_sec, ts.tv_nsec / 1000000,
+                      prefix ? prefix : "", prefix ? " " : "",
+                      buf);
        }
 }
diff --git a/print.h b/print.h
index e8f2c8e..6236a14 100644
--- a/print.h
+++ b/print.h
@@ -33,6 +33,7 @@ __attribute__ ((format (printf, 2, 3)))
 void print(int level, char const *format, ...);
 
 void print_set_progname(const char *name);
+void print_set_prefix(const char *prefix);
 void print_set_syslog(int value);
 void print_set_level(int level);
 void print_set_verbose(int value);
diff --git a/ptp4l.8 b/ptp4l.8
index 63e9abd..6755ad7 100644
--- a/ptp4l.8
+++ b/ptp4l.8
@@ -12,6 +12,8 @@ ptp4l - PTP Boundary/Ordinary Clock
 .BI \-p " phc-device"
 ] [
 .BI \-l " print-level"
+] [
+.BI \-o " print-prefix"
 ]
 [
 .BI \-i " interface"
@@ -82,6 +84,10 @@ Enable the slaveOnly mode.
 Set the maximum syslog level of messages which should be printed or sent to
 the system logger. The default is 6 (LOG_INFO).
 .TP
+.BI \-o " print-prefix"
+Specifies a prefix for messages printed to the standard output or system log.
+The default is empty string.
+.TP
 .B \-m
 Print messages to the standard output.
 .TP
@@ -466,6 +472,10 @@ is 0.
 The maximum logging level of messages which should be printed.
 The default is 6 (LOG_INFO).
 .TP
+.B logging_prefix
+Prefix for messages printed to the standard output or system log.
+The default is empty string.
+.TP
 .B verbose
 Print messages to the standard output if enabled.
 The default is 0 (disabled).
diff --git a/ptp4l.c b/ptp4l.c
index a87e7e6..c4813cb 100644
--- a/ptp4l.c
+++ b/ptp4l.c
@@ -62,6 +62,7 @@ static void usage(char *progname)
                "           (ignored for SOFTWARE/LEGACY HW time stamping)\n"
                " -s        slave only mode (overrides configuration file)\n"
                " -l [num]  set the logging level to 'num'\n"
+               " -o [str]  set prefix for log messages\n"
                " -m        print messages to stdout\n"
                " -q        do not print messages to the syslog\n"
                " -v        prints the software version and exits\n"
@@ -88,7 +89,7 @@ int main(int argc, char *argv[])
        /* Process the command line arguments. */
        progname = strrchr(argv[0], '/');
        progname = progname ? 1+progname : argv[0];
-       while (EOF != (c = getopt(argc, argv, "AEP246HSLf:i:p:sl:mqvh"))) {
+       while (EOF != (c = getopt(argc, argv, "AEP246HSLf:i:p:sl:o:mqvh"))) {
                switch (c) {
                case 'A':
                        if (config_set_int(cfg, "delay_mechanism", DM_AUTO))
@@ -150,6 +151,10 @@ int main(int argc, char *argv[])
                                goto out;
                        config_set_int(cfg, "logging_level", print_level);
                        break;
+               case 'o':
+                       if (config_set_string(cfg, "logging_prefix", optarg))
+                               goto out;
+                       break;
                case 'm':
                        config_set_int(cfg, "verbose", 1);
                        break;
@@ -176,6 +181,7 @@ int main(int argc, char *argv[])
        }
 
        print_set_progname(progname);
+       print_set_prefix(config_get_string(cfg, NULL, "logging_prefix"));
        print_set_verbose(config_get_int(cfg, NULL, "verbose"));
        print_set_syslog(config_get_int(cfg, NULL, "use_syslog"));
        print_set_level(config_get_int(cfg, NULL, "logging_level"));
-- 
2.9.3


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to