diff options
| -rw-r--r-- | include/osmocom/core/logging.h | 14 | ||||
| -rw-r--r-- | src/logging.c | 48 | ||||
| -rw-r--r-- | src/vty/logging_vty.c | 19 | 
3 files changed, 74 insertions, 7 deletions
| diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h index 1e809d0a..1e79dab3 100644 --- a/include/osmocom/core/logging.h +++ b/include/osmocom/core/logging.h @@ -220,6 +220,12 @@ enum log_target_type {  	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 @@ struct log_target {  	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 @@ struct log_target {  	/* 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_use_color(struct log_target *target, int);  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 e6e09e06..8cb34071 100644 --- a/src/logging.c +++ b/src/logging.c @@ -385,13 +385,22 @@ static void _output(struct log_target *target, unsigned int subsys,  				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);  	if (ret < 0) @@ -621,13 +630,30 @@ void log_set_print_extended_timestamp(struct log_target *target, int print_times  	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 @@ -641,6 +667,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.   *  \param[in] target Log target to be affected   *  \param[in] print_catname Enable (1) or disable (0) filenames @@ -723,7 +758,8 @@ struct log_target *log_target_create(void)  	/* 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 59148225..fd76d043 100644 --- a/src/vty/logging_vty.c +++ b/src/vty/logging_vty.c @@ -203,6 +203,23 @@ DEFUN(logging_prnt_cat,  	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 @@ void logging_vty_add_cmds()  	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 @@ void logging_vty_add_cmds()  	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); | 
