]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
add support of a lxc log file to cli
authorMichel Normand <normand@fr.ibm.com>
Thu, 14 May 2009 13:52:03 +0000 (15:52 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Thu, 14 May 2009 13:52:03 +0000 (15:52 +0200)
this is adding -o and -l options to all cli of lxc

Signed-off-by: Michel Normand <normand@fr.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
17 files changed:
src/lxc/log.c
src/lxc/log.h
src/lxc/lxc_cgroup.c
src/lxc/lxc_checkpoint.c
src/lxc/lxc_console.c
src/lxc/lxc_create.c
src/lxc/lxc_destroy.c
src/lxc/lxc_execute.c
src/lxc/lxc_freeze.c
src/lxc/lxc_info.c
src/lxc/lxc_monitor.c
src/lxc/lxc_restart.c
src/lxc/lxc_start.c
src/lxc/lxc_stop.c
src/lxc/lxc_unfreeze.c
src/lxc/lxc_unshare.c
src/lxc/lxc_wait.c

index 496805cb15925fb36eb415194429607bd38d4281..a5a43535df0e7db7bb074f0739622705dce27c8c 100644 (file)
@@ -127,9 +127,21 @@ static int log_open(const char *name)
 }
 
 /*---------------------------------------------------------------------------*/
-extern int lxc_log_init(const char *file, int priority, const char *prefix)
+extern int lxc_log_init(const char *file, const char *priority,
+                       const char *prefix)
 {
-       lxc_log_category_lxc.priority = priority;
+       int lxc_priority = LXC_LOG_PRIORITY_ERROR;
+
+       if (priority) {
+               lxc_priority = lxc_log_priority_to_int(priority);
+
+               if (lxc_priority == LXC_LOG_PRIORITY_NOTSET) {
+                       ERROR("invalid log priority %s", priority);
+                       return -1;
+               }
+       }
+
+       lxc_log_category_lxc.priority = lxc_priority;
 
        if (prefix)
                lxc_log_setprefix(prefix);
index cfe52c054cd0cc9ddae4a1766f708492c998d3e8..d36bcece25a46e1f24f68f0edec46b2da6ccb79c 100644 (file)
@@ -278,4 +278,6 @@ extern struct lxc_log_category lxc_log_category_lxc;
        ERROR("%s - " format "\n", strerror(errno), ##__VA_ARGS__);     \
 } while (0)
 
+extern int lxc_log_init(const char *file, const char *priority,
+                       const char *prefix);
 #endif
index e0cf6354d0e6ce8f41936b00e3582cf441aa1104..98dfe93cdb4e13c0d0cdcdc4a04cf91ceefd7505 100644 (file)
@@ -34,6 +34,8 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <subsystem> [value]\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
@@ -41,13 +43,20 @@ int main(int argc, char *argv[])
 {
        int opt;
        char *name = NULL, *subsystem = NULL, *value = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int nbargs = 0;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -56,6 +65,9 @@ int main(int argc, char *argv[])
        if (!name || (argc-optind) < 1)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        if ((argc -optind) >= 1)
                subsystem = argv[optind];
 
index 287ac3dce1570157599cf63e0dde72c6555d0b80..687d7f5cb32760faed97581a33e7f639afc6fbc2 100644 (file)
@@ -31,6 +31,8 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <statefile>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
@@ -38,11 +40,12 @@ int main(int argc, char *argv[])
 {
        int opt;
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int stop = 0;
        int nbargs = 0;
        int ret = 1;
 
-       while ((opt = getopt(argc, argv, "sn:")) != -1) {
+       while ((opt = getopt(argc, argv, "sn:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
@@ -50,6 +53,12 @@ int main(int argc, char *argv[])
                case 's':
                        stop = 1;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -61,6 +70,9 @@ int main(int argc, char *argv[])
        if (!argv[1])
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return -1;
+
        if (lxc_freeze(name))
                return -1;
 
index d095e6c71770c96e2fd2801d4b132041cc94878d..dc6e8999ea03bf87567b31b958ba7541cf478dd2 100644 (file)
@@ -48,12 +48,15 @@ void usage(char *cmd)
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
        fprintf(stderr, "\t [-t <tty#>] : tty number\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt;
        int nbargs = 0;
        int master = -1;
@@ -62,7 +65,7 @@ int main(int argc, char *argv[])
        int err = LXC_ERROR_INTERNAL;
        struct termios tios, oldtios;
 
-       while ((opt = getopt(argc, argv, "t:n:")) != -1) {
+       while ((opt = getopt(argc, argv, "t:n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
@@ -71,6 +74,12 @@ int main(int argc, char *argv[])
                case 't':
                        ttynum = atoi(optarg);
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -79,6 +88,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        /* Get current termios */
        if (tcgetattr(0, &tios)) {
                ERROR("failed to get current terminal settings : %s",
index a8a01a3bfb7632670f6b1368ad4fcbd6281a6d56..42ac24d54deea768d67d0475e207372ff8ddd520 100644 (file)
@@ -39,16 +39,19 @@ void usage(char *cmd)
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>    : name of the container\n");
        fprintf(stderr, "\t -f <confile> : path of the configuration file\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        const char *name = NULL, *file = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        struct lxc_conf lxc_conf;
        int err, opt;
 
-       while ((opt = getopt(argc, argv, "f:n:")) != -1) {
+       while ((opt = getopt(argc, argv, "f:n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
@@ -56,12 +59,23 @@ int main(int argc, char *argv[])
                case 'f':
                        file = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
        }
 
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
+       if (lxc_conf_init(&lxc_conf))
+               return 1;
 
        if (file && lxc_config_read(file, &lxc_conf))
                return 1;
index 0170aab095c61b293083d616f0d5c6b15a2dfa13..0383be1d62d3b4da8f9d178e3a6723ed3d47508a 100644 (file)
@@ -31,21 +31,30 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt;
        int nbargs = 0;
        int err;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -54,6 +63,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        err = lxc_destroy(name);
        if (err)
                return 1;
index e4636182156a5963a0d44b35997746747ed6ec3b..27aee6b4797a956ecc2841cd07711fae1ff010ad 100644 (file)
@@ -40,12 +40,15 @@ void usage(char *cmd)
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>      : name of the container\n");
        fprintf(stderr, "\t [-f <confile>] : path of the configuration file\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
-       char *name = NULL, *file = NULL;
+       const char *name = NULL, *file = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        static char **args;
        char path[MAXPATHLEN];
        int opt;
@@ -54,7 +57,7 @@ int main(int argc, char *argv[])
        int ret = 1;
        struct lxc_conf lxc_conf;
 
-       while ((opt = getopt(argc, argv, "f:n:")) != -1) {
+       while ((opt = getopt(argc, argv, "f:n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
@@ -62,6 +65,12 @@ int main(int argc, char *argv[])
                case 'f':
                        file = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -72,6 +81,9 @@ int main(int argc, char *argv[])
 
        argc -= nbargs;
        
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               goto out;
+
        if (lxc_conf_init(&lxc_conf))
                goto out;
 
index b8bdb309633b801072bf83fbd30b766b07bea579..bf6b5808434063f744b5ce03e549396da4108631 100644 (file)
@@ -32,20 +32,29 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt;
        int nbargs = 0;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -54,6 +63,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        if (lxc_freeze(name))
                return 1;
 
index a88e2a2d8f314c7311617ea2ef0d438083de913b..a960985d4f731867a7724eabbd369abc7dc249f2 100644 (file)
@@ -31,19 +31,28 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt, state, nbargs = 0;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -52,6 +61,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        state = lxc_getstate(name);
        if (state < 0)
                return 1;
index 52a91e8645d2d83700a140d134b8c2902fac24a9..472b3193081719eb9b37de26505f59f011eba501 100644 (file)
@@ -35,28 +35,40 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container or regular expression\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        char *regexp;
        struct lxc_msg msg;
        regex_t preg;
        int fd, opt;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
        }
 
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        regexp = malloc(strlen(name) + 3);
        sprintf(regexp, "^%s$", name);
 
index 1b5aab4818ebf6f7adc244a2e18f635ab5fbaf51..58bf40d78c2b36c56f03fe665d1d7c861c0cb9aa 100644 (file)
@@ -33,19 +33,28 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <statefile>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt, nbargs = 0;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -54,9 +63,12 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
-       if (!argv[1])
+       if (!argv[optind])
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        if (lxc_restart(name, argv[1], 0)) {
                ERROR("failed to restart %s", name);
                return 1;
index 922732c0878318e4d073554c4c2eebfc7234d28e..a60d1491d791c73e76581378451527857fa72f26 100644 (file)
@@ -43,12 +43,15 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        char **args;
        int opt, err = LXC_ERROR_INTERNAL, nbargs = 0;
        struct termios tios;
@@ -58,11 +61,17 @@ int main(int argc, char *argv[])
                '\0',
        };
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -78,6 +87,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        if (tcgetattr(0, &tios)) {
                ERROR("failed to get current terminal settings : %s",
                      strerror(errno));
index 275d27d526d8b7a4ec0926fe337a3a2759bfcd12..cc0b5edbd342a75195077ca999d94c0639b7fd27 100644 (file)
@@ -31,19 +31,28 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt, err, nbargs = 0;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -52,6 +61,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        err = lxc_stop(name);
        if (err) {
                fprintf(stderr, "%s\n", lxc_strerror(err));
index 7553df538e409ac991c66d1818a86ddd1a5ce4fc..562bd22ed4806d0954203b68178b59cdf2dc84b5 100644 (file)
@@ -31,19 +31,28 @@ void usage(char *cmd)
 {
        fprintf(stderr, "%s <command>\n", basename(cmd));
        fprintf(stderr, "\t -n <name>   : name of the container\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
 int main(int argc, char *argv[])
 {
        char *name = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        int opt, nbargs = 0;
 
-       while ((opt = getopt(argc, argv, "n:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
 
                nbargs++;
@@ -52,6 +61,9 @@ int main(int argc, char *argv[])
        if (!name)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
        if (lxc_unfreeze(name))
                return 1;
 
index f105ef26df022140840c54658402dc4dde8fb17b..c380422f21953028adb593119bd99906a55039c5 100644 (file)
@@ -45,6 +45,8 @@ void usage(char *cmd)
                        "\t           MOUNT, PID, UTSNAME, IPC, USER, NETWORK\n");
        fprintf(stderr, "\t -u <id> : new id to be set if -s USER is specified\n");
        fprintf(stderr, "\t if -f or -s PID is specified, <command> is mandatory)\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
@@ -131,11 +133,12 @@ int main(int argc, char *argv[])
        int ret;
        char *namespaces = NULL;
        char **args;
+       const char *log_file = NULL, *log_priority = NULL;
        long flags = 0;
        uid_t uid = -1; /* valid only if (flags & CLONE_NEWUSER) */
        pid_t pid;
 
-       while ((opt = getopt(argc, argv, "fs:u:")) != -1) {
+       while ((opt = getopt(argc, argv, "fs:u:o:l:")) != -1) {
                switch (opt) {
                case 's':
                        namespaces = optarg;
@@ -147,11 +150,20 @@ int main(int argc, char *argv[])
                case 'f':
                        hastofork = 1;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
        }
 
        args = &argv[optind];
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return 1;
+
         ret = lxc_fill_namespace_flags(namespaces, &flags);
        if (ret)
                usage(argv[0]);
index 16f21e803b781ac00131ba559030429108f2f79a..711b377388e9f4a23404de82cff69e5a4ac5db86 100644 (file)
@@ -36,6 +36,8 @@ void usage(char *cmd)
        fprintf(stderr, "\t -n <name>   : name of the container\n");
        fprintf(stderr, "\t -s <states> : ORed states to wait for STOPPED, " \
                "STARTING, RUNNING, STOPPING, ABORTING, FREEZING, FROZEN\n");
+       fprintf(stderr, "\t[-o <logfile>]    : path of the log file\n");
+       fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
        _exit(1);
 }
 
@@ -61,10 +63,11 @@ static int fillwaitedstates(char *strstates, int *states)
 int main(int argc, char *argv[])
 {
        char *name = NULL, *states = NULL;
+       const char *log_file = NULL, *log_priority = NULL;
        struct lxc_msg msg;
        int s[MAX_STATE] = { }, fd, opt;
 
-       while ((opt = getopt(argc, argv, "s:n:")) != -1) {
+       while ((opt = getopt(argc, argv, "s:n:o:l:")) != -1) {
                switch (opt) {
                case 'n':
                        name = optarg;
@@ -72,12 +75,21 @@ int main(int argc, char *argv[])
                case 's':
                        states = optarg;
                        break;
+               case 'o':
+                       log_file = optarg;
+                       break;
+               case 'l':
+                       log_priority = optarg;
+                       break;
                }
        }
 
        if (!name || !states)
                usage(argv[0]);
 
+       if (lxc_log_init(log_file, log_priority, basename(argv[0])))
+               return -1;
+
        if (fillwaitedstates(states, s)) {
                usage(argv[0]);
        }