Allow YAZ log level to be given for metaproxy prog
[metaproxy-moved-to-github.git] / src / metaproxy_prog.cpp
index 5a50f44..bfa1b77 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of Metaproxy.
-   Copyright (C) 2005-2012 Index Data
+   Copyright (C) 2005-2013 Index Data
 
 Metaproxy is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -47,6 +47,16 @@ namespace mp = metaproxy_1;
 
 mp::RouterFleXML *routerp = 0;
 
+static void set_log_prefix(void)
+{
+#if HAVE_UNISTD_H
+    char str[80];
+
+    sprintf(str, "%lld", (long long) getpid());
+    yaz_log_init_prefix(str);
+#endif
+}
+
 #if HAVE_UNISTD_H
 static pid_t process_group = 0;
 
@@ -67,6 +77,7 @@ static void sig_term_handler(int s)
 
 static void work_common(void *data)
 {
+    set_log_prefix();
 #if HAVE_UNISTD_H
     process_group = getpgid(0); // save process group ID
 
@@ -79,7 +90,9 @@ static void work_common(void *data)
     mp::Package pack;
     pack.router(*routerp).move();
     yaz_log(YLOG_LOG, "metaproxy stop"); /* only for graceful stop */
-    yaz_daemon_stop();
+#if HAVE_UNISTD_H
+    kill(-process_group, SIGTERM); /* kill all children processes as well */
+#endif
     _exit(0);
 }
 
@@ -109,7 +122,9 @@ static int sc_main(
     const char *pidfile = 0;
     const char *uid = 0;
 
-    while ((ret = options("c{config}:Dh{help}l:p:tu:V{version}w:X",
+    set_log_prefix();
+
+    while ((ret = options("c{config}:Dh{help}l:m:p:tu:v:V{version}w:X",
                           argv, argc, &arg)) != -2)
     {
         switch (ret)
@@ -124,9 +139,11 @@ static int sc_main(
             std::cerr << "metaproxy\n"
                 " -h|--help     help\n"
                 " -V|--version  version\n"
+                " -v level\n"
                 " -c|--config f config filename\n"
                 " -D            daemon and keepalive operation\n"
                 " -l f          log file f\n"
+                " -m logformat  log time format (strftime)\n"
                 " -p f          pid file f\n"
                 " -t            test configuration\n"
                 " -u id         change uid to id\n"
@@ -142,6 +159,9 @@ static int sc_main(
         case 'l':
             yaz_log_init_file(arg);
             break;
+        case 'm':
+            yaz_log_time_format(arg);
+            break;
         case 'p':
             pidfile = arg;
             break;
@@ -151,6 +171,9 @@ static int sc_main(
         case 'u':
             uid = arg;
             break;
+        case 'v':
+            yaz_log_init_level(yaz_log_mask_str(arg));
+            break;
         case 'V':
             std::cout << VERSION;
 #ifdef VERSION_SHA1
@@ -185,11 +208,11 @@ static int sc_main(
         return 1;
     }
 
-    if (!test_config)
-        yaz_log(YLOG_LOG, "metaproxy start " VERSION
+    yaz_log(YLOG_LOG, "metaproxy %s " VERSION
 #ifdef VERSION_SHA1
                 " " VERSION_SHA1
 #endif
+        , test_config ? "test" : "start"
             );
 
     yaz_log_xml_errors(0, YLOG_LOG);
@@ -249,6 +272,8 @@ static int sc_main(
         ret = 1;
     }
     xmlFreeDoc(doc);
+    if (test_config)
+        yaz_log(YLOG_LOG, "metaproxy test exit code %d", ret);
     return ret;
 }