diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/logging.c | 50 | ||||
| -rw-r--r-- | src/vty/logging_vty.c | 49 | 
2 files changed, 95 insertions, 4 deletions
diff --git a/src/logging.c b/src/logging.c index a4c3e0ec..7b532779 100644 --- a/src/logging.c +++ b/src/logging.c @@ -226,6 +226,14 @@ static const char* color(int subsys)  	return NULL;  } +static const char* category_name(int subsys) +{ +	if (subsys < osmo_log_info->num_cat) +		return osmo_log_info->cat[subsys].name; + +	return NULL; +} +  static void _output(struct log_target *target, unsigned int subsys,  		    unsigned int level, const char *file, int line, int cont,  		    const char *format, va_list ap) @@ -244,7 +252,17 @@ static void _output(struct log_target *target, unsigned int subsys,  		}  	}  	if (!cont) { -		if (target->print_timestamp) { +		if (target->print_ext_timestamp) { +			struct tm tm; +			time_t timep = time(NULL); +			localtime_r(&timep, &tm); +			ret = snprintf(buf + offset, rem, "%04d%02d%02d%02d%02d%02d000 ", +					tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, +					tm.tm_hour, tm.tm_min, tm.tm_sec); +			if (ret < 0) +				goto err; +			OSMO_SNPRINTF_RET(ret, rem, offset, len); +		} else if (target->print_timestamp) {  			char *timestr;  			time_t tm;  			tm = time(NULL); @@ -255,6 +273,12 @@ static void _output(struct log_target *target, unsigned int subsys,  				goto err;  			OSMO_SNPRINTF_RET(ret, rem, offset, len);  		} +		if (target->print_category) { +			ret = snprintf(buf + offset, rem, "%s ", category_name(subsys)); +			if (ret < 0) +				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); @@ -426,6 +450,19 @@ void log_set_print_timestamp(struct log_target *target, int print_timestamp)  	target->print_timestamp = print_timestamp;  } +/*! \brief Enable or disable printing of extended timestamps while logging + *  \param[in] target Log target to be affected + *  \param[in] print_timestamp Enable (1) or disable (0) timestamps + * + * When both timestamp and extended timestamp is enabled then only + * the extended timestamp will be used. The format of the timestamp + * is YYYYMMDDhhmmssnnn. + */ +void log_set_print_extended_timestamp(struct log_target *target, int print_timestamp) +{ +	target->print_ext_timestamp = print_timestamp; +} +  /*! \brief Enable or disable printing of the filename while logging   *  \param[in] target Log target to be affected   *  \param[in] print_filename Enable (1) or disable (0) filenames @@ -435,6 +472,17 @@ void log_set_print_filename(struct log_target *target, int print_filename)  	target->print_filename = print_filename;  } +/*! \brief Enable or disable printing of the category name + *  \param[in] target Log target to be affected + *  \param[in] print_catname Enable (1) or disable (0) filenames + * + *  Print the category/subsys name in front of every log message. + */ +void log_set_print_category(struct log_target *target, int print_category) +{ +	target->print_category = print_category; +} +  /*! \brief Set the global log level for a given log target   *  \param[in] target Log target to be affected   *  \param[in] log_level New global log level diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c index 47877fe9..bb19a31d 100644 --- a/src/vty/logging_vty.c +++ b/src/vty/logging_vty.c @@ -1,6 +1,6 @@  /* OpenBSC logging helper for the VTY */  /* (C) 2009-2010 by Harald Welte <laforge@gnumonks.org> - * (C) 2009-2010 by Holger Hans Peter Freyther + * (C) 2009-2014 by Holger Hans Peter Freyther   * All Rights Reserved   *   * This program is free software; you can redistribute it and/or modify @@ -149,6 +149,40 @@ DEFUN(logging_prnt_timestamp,  	return CMD_SUCCESS;  } +DEFUN(logging_prnt_ext_timestamp, +      logging_prnt_ext_timestamp_cmd, +      "logging print extended-timestamp (0|1)", +	LOGGING_STR "Log output settings\n" +	"Configure log message timestamping\n" +	"Don't prefix each log message\n" +	"Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn\n") +{ +	struct log_target *tgt = osmo_log_vty2tgt(vty); + +	if (!tgt) +		return CMD_WARNING; + +	log_set_print_extended_timestamp(tgt, atoi(argv[0])); +	return CMD_SUCCESS; +} + +DEFUN(logging_prnt_cat, +      logging_prnt_cat_cmd, +      "logging print category (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 name\n") +{ +	struct log_target *tgt = osmo_log_vty2tgt(vty); + +	if (!tgt) +		return CMD_WARNING; + +	log_set_print_category(tgt, atoi(argv[0])); +	return CMD_SUCCESS; +} +  DEFUN(logging_level,        logging_level_cmd,        NULL, /* cmdstr is dynamically set in logging_vty_add_cmds(). */ @@ -625,8 +659,13 @@ static int config_write_log_single(struct vty *vty, struct log_target *tgt)  	vty_out(vty, "  logging color %u%s", tgt->use_color ? 1 : 0,  		VTY_NEWLINE); -	vty_out(vty, "  logging timestamp %u%s", tgt->print_timestamp ? 1 : 0, -		VTY_NEWLINE); +	vty_out(vty, "  logging print cateyory %d%s", +		tgt->print_ext_timestamp ? 1 : 0, VTY_NEWLINE); +	if (tgt->print_ext_timestamp) +		vty_out(vty, "  logging print extended-timestamp 1%s", VTY_NEWLINE); +	else +		vty_out(vty, "  logging timestamp %u%s", +			tgt->print_timestamp ? 1 : 0, VTY_NEWLINE);  	/* stupid old osmo logging API uses uppercase strings... */  	osmo_str2lower(level_lower, log_level_str(tgt->loglevel)); @@ -670,6 +709,8 @@ void logging_vty_add_cmds(const struct log_info *cat)  	install_element_ve(&logging_fltr_all_cmd);  	install_element_ve(&logging_use_clr_cmd);  	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_set_category_mask_cmd);  	install_element_ve(&logging_set_category_mask_old_cmd); @@ -685,6 +726,8 @@ void logging_vty_add_cmds(const struct log_info *cat)  	install_element(CFG_LOG_NODE, &logging_fltr_all_cmd);  	install_element(CFG_LOG_NODE, &logging_use_clr_cmd);  	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_level_cmd);  	install_element(CONFIG_NODE, &cfg_log_stderr_cmd);  | 
