aboutsummaryrefslogtreecommitdiffstats
path: root/ggsn
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-12-04 18:54:58 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-12-04 18:54:58 +0100
commitc38bf64e3fb97f92e603fec24760b1ef856cd08d (patch)
treef51ef7ac67155fce815a841e601916af0447f86f /ggsn
parent9c7fd8edc4f114ea77b955fb7aaac51fb5c828d4 (diff)
ggsn: Be able to set the log level for the text file
Fixes: SYS#599
Diffstat (limited to 'ggsn')
-rw-r--r--ggsn/cmdline.c26
-rw-r--r--ggsn/cmdline.ggo2
-rw-r--r--ggsn/cmdline.h4
-rw-r--r--ggsn/ggsn.c12
4 files changed, 43 insertions, 1 deletions
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 }
};
@@ -877,6 +889,20 @@ cmdline_parser_internal (
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;
case '?': /* Invalid option. */
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) {