From c38bf64e3fb97f92e603fec24760b1ef856cd08d Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Thu, 4 Dec 2014 18:54:58 +0100 Subject: ggsn: Be able to set the log level for the text file Fixes: SYS#599 --- ggsn/cmdline.c | 26 ++++++++++++++++++++++++++ ggsn/cmdline.ggo | 2 +- ggsn/cmdline.h | 4 ++++ ggsn/ggsn.c | 12 ++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/ggsn/cmdline.c b/ggsn/cmdline.c index 3fcfbd5..37ed992 100644 --- a/ggsn/cmdline.c +++ b/ggsn/cmdline.c @@ -53,6 +53,7 @@ const char *gengetopt_args_info_help[] = { " -a, --apn=STRING Access point name (default=`internet')", " -q, --qos=INT Requested quality of service (default=`0x0b921f')", " --logfile=STRING Logfile for errors", + " --loglevel=STRING Global log ldevel (default=`error')", 0 }; @@ -121,6 +122,7 @@ void clear_given (struct gengetopt_args_info *args_info) args_info->apn_given = 0 ; args_info->qos_given = 0 ; args_info->logfile_given = 0 ; + args_info->loglevel_given = 0 ; } static @@ -159,6 +161,8 @@ void clear_args (struct gengetopt_args_info *args_info) args_info->qos_orig = NULL; args_info->logfile_arg = NULL; args_info->logfile_orig = NULL; + args_info->loglevel_arg = gengetopt_strdup ("error"); + args_info->loglevel_orig = NULL; } @@ -186,6 +190,7 @@ void init_args_info(struct gengetopt_args_info *args_info) args_info->apn_help = gengetopt_args_info_help[16] ; args_info->qos_help = gengetopt_args_info_help[17] ; args_info->logfile_help = gengetopt_args_info_help[18] ; + args_info->loglevel_help = gengetopt_args_info_help[19] ; } @@ -297,6 +302,8 @@ cmdline_parser_release (struct gengetopt_args_info *args_info) free_string_field (&(args_info->qos_orig)); free_string_field (&(args_info->logfile_arg)); free_string_field (&(args_info->logfile_orig)); + free_string_field (&(args_info->loglevel_arg)); + free_string_field (&(args_info->loglevel_orig)); @@ -365,6 +372,8 @@ cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) write_into_file(outfile, "qos", args_info->qos_orig, 0); if (args_info->logfile_given) write_into_file(outfile, "logfile", args_info->logfile_orig, 0); + if (args_info->loglevel_given) + write_into_file(outfile, "loglevel", args_info->loglevel_orig, 0); i = EXIT_SUCCESS; @@ -594,12 +603,14 @@ cmdline_parser_internal ( int override; int initialize; + int check_required; int check_ambiguity; package_name = argv[0]; override = params->override; initialize = params->initialize; + check_required = params->check_required; check_ambiguity = params->check_ambiguity; if (initialize) @@ -636,6 +647,7 @@ cmdline_parser_internal ( { "apn", 1, NULL, 'a' }, { "qos", 1, NULL, 'q' }, { "logfile", 1, NULL, 0 }, + { "loglevel", 1, NULL, 0 }, { 0, 0, 0, 0 } }; @@ -876,6 +888,20 @@ cmdline_parser_internal ( additional_error)) goto failure; + } + /* Global log ldevel. */ + else if (strcmp (long_options[option_index].name, "loglevel") == 0) + { + + + if (update_arg( (void *)&(args_info->loglevel_arg), + &(args_info->loglevel_orig), &(args_info->loglevel_given), + &(local_args_info.loglevel_given), optarg, 0, "error", ARG_STRING, + check_ambiguity, override, 0, 0, + "loglevel", '-', + additional_error)) + goto failure; + } break; diff --git a/ggsn/cmdline.ggo b/ggsn/cmdline.ggo index 5bb05dc..9c4c976 100644 --- a/ggsn/cmdline.ggo +++ b/ggsn/cmdline.ggo @@ -32,4 +32,4 @@ option "timelimit" - "Exit after timelimit seconds" int default="0" no option "apn" a "Access point name" string default="internet" no option "qos" q "Requested quality of service" int default="0x0b921f" no option "logfile" - "Logfile for errors" string no - +option "loglevel" - "Global log ldevel" string default="error" no diff --git a/ggsn/cmdline.h b/ggsn/cmdline.h index f3636e8..a87fa4a 100644 --- a/ggsn/cmdline.h +++ b/ggsn/cmdline.h @@ -92,6 +92,9 @@ struct gengetopt_args_info char * logfile_arg; /**< @brief Logfile for errors. */ char * logfile_orig; /**< @brief Logfile for errors original value given at command line. */ const char *logfile_help; /**< @brief Logfile for errors help description. */ + char * loglevel_arg; /**< @brief Global log ldevel (default='error'). */ + char * loglevel_orig; /**< @brief Global log ldevel original value given at command line. */ + const char *loglevel_help; /**< @brief Global log ldevel help description. */ unsigned int help_given ; /**< @brief Whether help was given. */ unsigned int version_given ; /**< @brief Whether version was given. */ @@ -112,6 +115,7 @@ struct gengetopt_args_info unsigned int apn_given ; /**< @brief Whether apn was given. */ unsigned int qos_given ; /**< @brief Whether qos was given. */ unsigned int logfile_given ; /**< @brief Whether logfile was given. */ + unsigned int loglevel_given ; /**< @brief Whether loglevel was given. */ } ; diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index 3fd584a..86a9899 100644 --- a/ggsn/ggsn.c +++ b/ggsn/ggsn.c @@ -280,6 +280,8 @@ int main(int argc, char **argv) /* Open a log file */ if (args_info.logfile_arg) { struct log_target *tgt; + int lvl; + tgt = log_target_find(LOG_TGT_TYPE_FILE, args_info.logfile_arg); if (!tgt) { tgt = log_target_create_file(args_info.logfile_arg); @@ -291,6 +293,16 @@ int main(int argc, char **argv) } log_add_target(tgt); } + log_set_all_filter(tgt, 1); + log_set_use_color(tgt, 0); + + if (args_info.loglevel_arg) { + lvl = log_parse_level(args_info.loglevel_arg); + log_set_log_level(tgt, lvl); + LOGP(DGGSN, LOGL_NOTICE, + "Set file log level to %s\n", + log_level_str(lvl)); + } } if (args_info.debug_flag) { -- cgit v1.2.3