Mailing List Archive

[PATCH 11/14] xl: Allow control of logging level.
The -v option, which must come before the xl command, increases the
logging level each time it is supplied.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
tools/libxc/xtl_logger_stdio.c | 5 ++++-
tools/libxl/xl.c | 40 ++++++++++++++++++++++++++++------------
tools/libxl/xl.h | 2 +-
3 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/tools/libxc/xtl_logger_stdio.c b/tools/libxc/xtl_logger_stdio.c
index 587c67d..abe274a 100644
--- a/tools/libxc/xtl_logger_stdio.c
+++ b/tools/libxc/xtl_logger_stdio.c
@@ -36,6 +36,9 @@ static void stdiostream_vmessage(xentoollog_logger *logger_in,
va_list al) {
xentoollog_logger_stdiostream *lg = (void*)logger_in;

+ if (level < lg->min_level)
+ return;
+
progress_erase(lg);

if (lg->flags & XTL_STDIOSTREAM_SHOW_DATE) {
@@ -82,7 +85,7 @@ static void stdiostream_progress(struct xentoollog_logger *logger_in,
this_level = XTL_PROGRESS;
}

- if (lg->min_level < this_level)
+ if (this_level < lg->min_level)
return;

if (lg->progress_erase_len)
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index 8b10674..8ddba28 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -31,19 +31,38 @@
#include "libxl_utils.h"
#include "xl.h"

-xentoollog_logger *logger;
+xentoollog_logger_stdiostream *logger;
+
+static xentoollog_level minmsglevel = XTL_PROGRESS;

int main(int argc, char **argv)
{
- int i;
+ int opt = 0, i;
+ char *cmd = 0;
+
+ while ((opt = getopt(argc, argv, "+v")) >= 0) {
+ switch (opt) {
+ case 'v':
+ if (minmsglevel > 0) minmsglevel--;
+ break;
+ default:
+ fprintf(stderr, "unknown global option\n");
+ exit(2);
+ }
+ }
+
+ cmd = argv[optind++];

- if (argc < 2) {
+ if (!cmd) {
help(NULL);
exit(1);
}
+ opterr = 0;
+
+ logger = xtl_createlogger_stdiostream(stderr, minmsglevel, 0);
+ if (!logger) exit(1);

- logger = xtl_createlogger_stdiostream(stderr, XTL_PROGRESS, 0);
- if (libxl_ctx_init(&ctx, LIBXL_VERSION, logger)) {
+ if (libxl_ctx_init(&ctx, LIBXL_VERSION, (xentoollog_logger*)logger)) {
fprintf(stderr, "cannot init xl context\n");
exit(1);
}
@@ -51,16 +70,13 @@ int main(int argc, char **argv)
srand(time(0));

for (i = 0; i < cmdtable_len; i++) {
- if (!strcmp(argv[1], cmd_table[i].cmd_name))
- cmd_table[i].cmd_impl(argc - 1, argv + 1);
+ if (!strcmp(cmd, cmd_table[i].cmd_name))
+ cmd_table[i].cmd_impl(argc, argv);
}

if (i >= cmdtable_len) {
- if (!strcmp(argv[1], "help")) {
- if (argc > 2)
- help(argv[2]);
- else
- help(NULL);
+ if (!strcmp(cmd, "help")) {
+ help(argv[1]);
exit(0);
} else {
fprintf(stderr, "command not implemented\n");
diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
index 8b3644c..3144a64 100644
--- a/tools/libxl/xl.h
+++ b/tools/libxl/xl.h
@@ -77,6 +77,6 @@ extern struct cmd_spec cmd_table[];
extern int cmdtable_len;

extern struct libxl_ctx ctx;
-extern xentoollog_logger *logger;
+extern xentoollog_logger_stdiostream *logger;

#endif /* XL_H */
--
1.5.6.5


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH 11/14] xl: Allow control of logging level. [ In reply to ]
Hi Ian,

On 05/28/2010 12:01 AM, Ian Jackson wrote:
> The -v option, which must come before the xl command, increases the
> logging level each time it is supplied.
>
> Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
> ---
> tools/libxc/xtl_logger_stdio.c | 5 ++++-
> tools/libxl/xl.c | 40 ++++++++++++++++++++++++++++------------
> tools/libxl/xl.h | 2 +-
> 3 files changed, 33 insertions(+), 14 deletions(-)
>
> diff --git a/tools/libxc/xtl_logger_stdio.c b/tools/libxc/xtl_logger_stdio.c
> index 587c67d..abe274a 100644
> --- a/tools/libxc/xtl_logger_stdio.c
> +++ b/tools/libxc/xtl_logger_stdio.c
> @@ -36,6 +36,9 @@ static void stdiostream_vmessage(xentoollog_logger *logger_in,
> va_list al) {
> xentoollog_logger_stdiostream *lg = (void*)logger_in;
>
> + if (level < lg->min_level)
> + return;
> +
> progress_erase(lg);
>
> if (lg->flags & XTL_STDIOSTREAM_SHOW_DATE) {
> @@ -82,7 +85,7 @@ static void stdiostream_progress(struct xentoollog_logger *logger_in,
> this_level = XTL_PROGRESS;
> }
>
> - if (lg->min_level < this_level)
> + if (this_level < lg->min_level)
> return;
>
> if (lg->progress_erase_len)
> diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
> index 8b10674..8ddba28 100644
> --- a/tools/libxl/xl.c
> +++ b/tools/libxl/xl.c
> @@ -31,19 +31,38 @@
> #include "libxl_utils.h"
> #include "xl.h"
>
> -xentoollog_logger *logger;
> +xentoollog_logger_stdiostream *logger;
> +
> +static xentoollog_level minmsglevel = XTL_PROGRESS;
>
> int main(int argc, char **argv)
> {
> - int i;
> + int opt = 0, i;
> + char *cmd = 0;
> +
> + while ((opt = getopt(argc, argv, "+v")) >= 0) {
> + switch (opt) {
> + case 'v':
> + if (minmsglevel > 0) minmsglevel--;
> + break;
> + default:
> + fprintf(stderr, "unknown global option\n");
> + exit(2);
> + }
> + }
> +
> + cmd = argv[optind++];
>
> - if (argc < 2) {
> + if (!cmd) {
> help(NULL);
> exit(1);
> }
> + opterr = 0;
> +
> + logger = xtl_createlogger_stdiostream(stderr, minmsglevel, 0);
> + if (!logger) exit(1);
>
> - logger = xtl_createlogger_stdiostream(stderr, XTL_PROGRESS, 0);
> - if (libxl_ctx_init(&ctx, LIBXL_VERSION, logger)) {
> + if (libxl_ctx_init(&ctx, LIBXL_VERSION, (xentoollog_logger*)logger)) {
> fprintf(stderr, "cannot init xl context\n");
> exit(1);
> }
> @@ -51,16 +70,13 @@ int main(int argc, char **argv)
> srand(time(0));
>
> for (i = 0; i < cmdtable_len; i++) {
> - if (!strcmp(argv[1], cmd_table[i].cmd_name))
> - cmd_table[i].cmd_impl(argc - 1, argv + 1);
> + if (!strcmp(cmd, cmd_table[i].cmd_name))
> + cmd_table[i].cmd_impl(argc, argv);

Why are you change (argc - 1, argv + 1) to (argc, argv)?
this causes many command line parseing problems in current
code...Since we've already fix some of the command line
parseing problems, I wonder if we could change these back?

> }
>
> if (i >= cmdtable_len) {
> - if (!strcmp(argv[1], "help")) {
> - if (argc > 2)
> - help(argv[2]);
> - else
> - help(NULL);
> + if (!strcmp(cmd, "help")) {
> + help(argv[1]);
> exit(0);
> } else {
> fprintf(stderr, "command not implemented\n");
> diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
> index 8b3644c..3144a64 100644
> --- a/tools/libxl/xl.h
> +++ b/tools/libxl/xl.h
> @@ -77,6 +77,6 @@ extern struct cmd_spec cmd_table[];
> extern int cmdtable_len;
>
> extern struct libxl_ctx ctx;
> -extern xentoollog_logger *logger;
> +extern xentoollog_logger_stdiostream *logger;
>
> #endif /* XL_H */


--
Regards
Yang Hongyang

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH 11/14] xl: Allow control of logging level. [ In reply to ]
Yang Hongyang writes ("Re: [Xen-devel] [PATCH 11/14] xl: Allow control of logging level."):
> Why are you change (argc - 1, argv + 1) to (argc, argv)?
> this causes many command line parseing problems in current
> code...Since we've already fix some of the command line
> parseing problems, I wonder if we could change these back?

I mainly tested it with "xl migrate". Perhaps the bug was in "xl
migrate" and not in the other functions. There doesn't seem to be
much consistency.

I'm happy for it to be fixed either way.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel