[MERGED] libosmocore[master]: logging: separate the '<000b>' subsys from filename logging

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Fri Jan 19 15:46:50 UTC 2018


Neels Hofmeyr has submitted this change and it was merged.

Change subject: logging: separate the '<000b>' subsys from filename logging
......................................................................


logging: separate the '<000b>' subsys from filename logging

Add a separate flag and API to switch the category-in-hex output:
log_set_print_category_hex().

Add log_set_print_filename2() to modify only the print_filename flag. The old
log_set_print_filename() function still affects both flags. Explain the
rationale in the comment for log_set_print_filename().

There is no need to deprecate log_set_print_filename(); it might cause compiler
warnings and break strict builds unnecessarily.

Add VTY command 'logging print category-hex (0|1)'.

Since there is no VTY command to switch filename output, nothing needs to be
adjusted there (a command will be added in a subsequent patch).

Change-Id: Iba03a2b7915853c6dccaf6c393c31405320538b4
---
M include/osmocom/core/logging.h
M src/logging.c
M src/vty/logging_vty.c
3 files changed, 74 insertions(+), 7 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 1e809d0..1e79dab 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -220,6 +220,12 @@
 	LOG_TGT_TYPE_GSMTAP,	/*!< GSMTAP network logging */
 };
 
+/*! Whether/how to log the source filename (and line number). */
+enum log_filename_type {
+	LOG_FILENAME_NONE,
+	LOG_FILENAME_PATH,
+};
+
 /*! structure representing a logging target */
 struct log_target {
         struct llist_head entry;		/*!< linked list */
@@ -238,7 +244,7 @@
 	unsigned int use_color:1;
 	/*! should log messages be prefixed with a timestamp? */
 	unsigned int print_timestamp:1;
-	/*! should log messages be prefixed with a filename? */
+	/*! DEPRECATED: use print_filename2 instead. */
 	unsigned int print_filename:1;
 	/*! should log messages be prefixed with a category name? */
 	unsigned int print_category:1;
@@ -301,6 +307,10 @@
 
 	/* Should the log level be printed? */
 	bool print_level;
+	/* Should we print the subsys in hex like '<000b>'? */
+	bool print_category_hex;
+	/* Should we print the source file and line, and in which way? */
+	enum log_filename_type print_filename2;
 };
 
 /* use the above macros */
@@ -322,7 +332,9 @@
 void log_set_print_extended_timestamp(struct log_target *target, int);
 void log_set_print_timestamp(struct log_target *target, int);
 void log_set_print_filename(struct log_target *target, int);
+void log_set_print_filename2(struct log_target *target, enum log_filename_type lft);
 void log_set_print_category(struct log_target *target, int);
+void log_set_print_category_hex(struct log_target *target, int);
 void log_set_print_level(struct log_target *target, int);
 void log_set_log_level(struct log_target *target, int log_level);
 void log_parse_category_mask(struct log_target *target, const char* mask);
diff --git a/src/logging.c b/src/logging.c
index e6e09e0..8cb3407 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -385,12 +385,21 @@
 				goto err;
 			OSMO_SNPRINTF_RET(ret, rem, offset, len);
 		}
-		if (target->print_filename) {
-			ret = snprintf(buf + offset, rem, "<%4.4x> %s:%d ",
-					subsys, file, line);
+		if (target->print_category_hex) {
+			ret = snprintf(buf + offset, rem, "<%4.4x> ", subsys);
 			if (ret < 0)
 				goto err;
 			OSMO_SNPRINTF_RET(ret, rem, offset, len);
+		}
+		switch (target->print_filename2) {
+		case LOG_FILENAME_NONE:
+			break;
+		case LOG_FILENAME_PATH:
+			ret = snprintf(buf + offset, rem, "%s:%d ", file, line);
+			if (ret < 0)
+				goto err;
+			OSMO_SNPRINTF_RET(ret, rem, offset, len);
+			break;
 		}
 	}
 	ret = vsnprintf(buf + offset, rem, format, ap);
@@ -621,13 +630,30 @@
 	target->print_ext_timestamp = print_timestamp;
 }
 
-/*! Enable or disable printing of the filename while logging
+/*! Use log_set_print_filename2() instead.
+ * Call log_set_print_filename2() with LOG_FILENAME_PATH or LOG_FILENAME_NONE, *as well as* call
+ * log_set_print_category_hex() with the argument passed to this function. This is to mirror legacy
+ * behavior, which combined the category in hex with the filename. For example, if the category-hex
+ * output were no longer affected by log_set_print_filename(), many unit tests (in libosmocore as well as
+ * dependent projects) would fail since they expect the category to disappear along with the filename.
  *  \param[in] target Log target to be affected
  *  \param[in] print_filename Enable (1) or disable (0) filenames
  */
 void log_set_print_filename(struct log_target *target, int print_filename)
 {
-	target->print_filename = print_filename;
+	log_set_print_filename2(target, print_filename ? LOG_FILENAME_PATH : LOG_FILENAME_NONE);
+	log_set_print_category_hex(target, print_filename);
+}
+
+/*! Enable or disable printing of the filename while logging.
+ *  \param[in] target Log target to be affected.
+ *  \param[in] print_filename An LOG_FILENAME_* enum value.
+ * LOG_FILENAME_NONE omits the source file and line information from logs.
+ * LOG_FILENAME_PATH prints the entire source file path as passed to LOGP macros.
+ */
+void log_set_print_filename2(struct log_target *target, enum log_filename_type lft)
+{
+	target->print_filename2 = lft;
 }
 
 /*! Enable or disable printing of the category name
@@ -639,6 +665,15 @@
 void log_set_print_category(struct log_target *target, int print_category)
 {
 	target->print_category = print_category;
+}
+
+/*! Enable or disable printing of the category number in hex ('<000b>').
+ *  \param[in] target Log target to be affected.
+ *  \param[in] print_category_hex Enable (1) or disable (0) hex category.
+ */
+void log_set_print_category_hex(struct log_target *target, int print_category_hex)
+{
+	target->print_category_hex = print_category_hex;
 }
 
 /*! Enable or disable printing of the log level name.
@@ -723,7 +758,8 @@
 	/* global settings */
 	target->use_color = 1;
 	target->print_timestamp = 0;
-	target->print_filename = 1;
+	target->print_filename2 = LOG_FILENAME_PATH;
+	target->print_category_hex = true;
 
 	/* global log level */
 	target->loglevel = 0;
diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c
index 5914822..fd76d04 100644
--- a/src/vty/logging_vty.c
+++ b/src/vty/logging_vty.c
@@ -203,6 +203,23 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(logging_prnt_cat_hex,
+      logging_prnt_cat_hex_cmd,
+      "logging print category-hex (0|1)",
+	LOGGING_STR "Log output settings\n"
+	"Configure log message\n"
+	"Don't prefix each log message\n"
+	"Prefix each log message with category/subsystem nr in hex ('<000b>')\n")
+{
+	struct log_target *tgt = osmo_log_vty2tgt(vty);
+
+	if (!tgt)
+		return CMD_WARNING;
+
+	log_set_print_category_hex(tgt, atoi(argv[0]));
+	return CMD_SUCCESS;
+}
+
 DEFUN(logging_prnt_level,
       logging_prnt_level_cmd,
       "logging print level (0|1)",
@@ -802,6 +819,7 @@
 	install_element_ve(&logging_prnt_timestamp_cmd);
 	install_element_ve(&logging_prnt_ext_timestamp_cmd);
 	install_element_ve(&logging_prnt_cat_cmd);
+	install_element_ve(&logging_prnt_cat_hex_cmd);
 	install_element_ve(&logging_prnt_level_cmd);
 	install_element_ve(&logging_set_category_mask_cmd);
 	install_element_ve(&logging_set_category_mask_old_cmd);
@@ -819,6 +837,7 @@
 	install_element(CFG_LOG_NODE, &logging_prnt_timestamp_cmd);
 	install_element(CFG_LOG_NODE, &logging_prnt_ext_timestamp_cmd);
 	install_element(CFG_LOG_NODE, &logging_prnt_cat_cmd);
+	install_element(CFG_LOG_NODE, &logging_prnt_cat_hex_cmd);
 	install_element(CFG_LOG_NODE, &logging_prnt_level_cmd);
 	install_element(CFG_LOG_NODE, &logging_level_cmd);
 

-- 
To view, visit https://gerrit.osmocom.org/5812
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iba03a2b7915853c6dccaf6c393c31405320538b4
Gerrit-PatchSet: 4
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list