eal: change specific log levels at startup

Example of use:
  ./app/test-pmd --log-level='pmd\.i40e.*,8'

  This enables debug logs for all dynamic logs whose type starts with
  'pmd.i40e'.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
Olivier Matz 2017-04-04 18:40:36 +02:00 committed by Thomas Monjalon
parent a5279180f5
commit 845afe51e4
3 changed files with 40 additions and 17 deletions

View File

@ -519,10 +519,8 @@ rte_eal_init(int argc, char **argv)
thread_id = pthread_self();
eal_log_level_parse(argc, argv);
/* set log level as early as possible */
rte_set_log_level(internal_config.log_level);
eal_log_level_parse(argc, argv);
if (rte_eal_cpu_init() < 0) {
rte_eal_init_alert("Cannot detect lcores.");

View File

@ -739,25 +739,53 @@ eal_parse_syslog(const char *facility, struct internal_config *conf)
}
static int
eal_parse_log_level(const char *level, uint32_t *log_level)
eal_parse_log_level(const char *arg, struct internal_config *conf)
{
char *end;
char *end, *str, *type, *level;
unsigned long tmp;
str = strdup(arg);
if (str == NULL)
return -1;
if (strchr(str, ',') == NULL) {
type = NULL;
level = str;
} else {
type = strsep(&str, ",");
level = strsep(&str, ",");
}
errno = 0;
tmp = strtoul(level, &end, 0);
/* check for errors */
if ((errno != 0) || (level[0] == '\0') ||
end == NULL || (*end != '\0'))
return -1;
end == NULL || (*end != '\0'))
goto fail;
/* log_level is a uint32_t */
if (tmp >= UINT32_MAX)
return -1;
goto fail;
*log_level = tmp;
printf("set log level %s,%lu\n",
type, tmp);
if (type == NULL) {
conf->log_level = tmp;
rte_set_log_level(tmp);
} else if (rte_log_set_level_regexp(type, tmp) < 0) {
printf("cannot set log level %s,%lu\n",
type, tmp);
goto fail;
}
free(str);
return 0;
fail:
free(str);
return -1;
}
static enum rte_proc_type_t
@ -898,15 +926,12 @@ eal_parse_common_option(int opt, const char *optarg,
break;
case OPT_LOG_LEVEL_NUM: {
uint32_t log;
if (eal_parse_log_level(optarg, &log) < 0) {
if (eal_parse_log_level(optarg, conf) < 0) {
RTE_LOG(ERR, EAL,
"invalid parameters for --"
OPT_LOG_LEVEL "\n");
return -1;
}
conf->log_level = log;
break;
}
case OPT_LCORES_NUM:
@ -1057,7 +1082,9 @@ eal_common_usage(void)
" --"OPT_VMWARE_TSC_MAP" Use VMware TSC map instead of native RDTSC\n"
" --"OPT_PROC_TYPE" Type of this process (primary|secondary|auto)\n"
" --"OPT_SYSLOG" Set syslog facility\n"
" --"OPT_LOG_LEVEL" Set default log level\n"
" --"OPT_LOG_LEVEL"=<int> Set global log level\n"
" --"OPT_LOG_LEVEL"=<type-regexp>,<int>\n"
" Set specific log level\n"
" -v Display version information on startup\n"
" -h, --help This help\n"
"\nEAL options for DEBUG use only:\n"

View File

@ -776,10 +776,8 @@ rte_eal_init(int argc, char **argv)
thread_id = pthread_self();
eal_log_level_parse(argc, argv);
/* set log level as early as possible */
rte_set_log_level(internal_config.log_level);
eal_log_level_parse(argc, argv);
if (rte_eal_cpu_init() < 0) {
rte_eal_init_alert("Cannot detect lcores.");