fix MOL-177: Fix logging
diff --git a/io_scenario/io.py b/io_scenario/io.py
index 4f7cbcf..b9f3b6f 100644
--- a/io_scenario/io.py
+++ b/io_scenario/io.py
@@ -4,9 +4,11 @@
 import stat
 import time
 import json
+import Queue
 import os.path
 import argparse
 import warnings
+import threading
 import subprocess
 
 
@@ -492,9 +494,23 @@
         "--prepare-only", default=False, dest='prepare_only',
         action="store_true")
     parser.add_argument("--concurrency", default=1, type=int)
+
+    parser.add_argument("--with-sensors", default="",
+                        dest="with_sensors")
+
     return parser.parse_args(argv)
 
 
+def sensor_thread(sensor_list, cmd_q, data_q):
+    while True:
+        try:
+            cmd_q.get(timeout=0.5)
+            data_q.put([])
+            return
+        except Queue.Empty:
+            pass
+
+
 def main(argv):
     argv_obj = parse_args(argv)
     argv_obj.blocksize = ssize_to_kb(argv_obj.blocksize)
@@ -542,17 +558,33 @@
             if dt > 0:
                 time.sleep(dt)
 
+        if argv_obj.with_sensors != "":
+            oq = Queue.Queue()
+            iq = Queue.Queue()
+            argv = (argv_obj.with_sensors, oq, iq)
+            th = threading.Thread(None, sensor_thread, None, argv)
+            th.daemon = True
+            th.start()
+
         res, cmd = run_benchmark(argv_obj.type,
                                  benchmark,
                                  binary_path,
                                  test_file_name,
                                  argv_obj.prepare_only,
                                  argv_obj.timeout)
+        if argv_obj.with_sensors != "":
+            iq.put(None)
+            stats = oq.get()
+        else:
+            stats = None
 
         if not argv_obj.prepare_only:
             res['__meta__'] = benchmark.__dict__.copy()
             res['__meta__']['cmdline'] = cmd
 
+            if stats is not None:
+                res['__meta__']['sensor_data'] = stats
+
         sys.stdout.write(json.dumps(res))
 
         if not argv_obj.prepare_only:
diff --git a/itest.py b/itest.py
index d4f4f52..178acce 100644
--- a/itest.py
+++ b/itest.py
@@ -2,12 +2,17 @@
 import json
 import types
 import os.path
+import logging
+
 
 from io_scenario import io
 from ssh_copy_directory import copy_paths
 from utils import run_over_ssh
 
 
+logger = logging.getLogger("io-perf-tool")
+
+
 class IPerfTest(object):
     def __init__(self, on_result_cb):
         self.set_result_cb(on_result_cb)
@@ -58,10 +63,11 @@
 
     def run(self, conn):
         args = ['env', 'python2', self.io_py_remote] + self.script_opts
-        code, out, err = run_over_ssh(conn, " ".join(args))
-        self.on_result(code, out, err)
+        cmd = " ".join(args)
+        code, out, err = run_over_ssh(conn, cmd)
+        self.on_result(code, out, err, cmd)
 
-    def on_result(self, code, out, err):
+    def on_result(self, code, out, err, cmd):
         if 0 == code:
             try:
                 for line in out.split("\n"):
@@ -70,3 +76,6 @@
             except Exception as err:
                 msg = "Error during postprocessing results: {0!r}".format(err)
                 raise RuntimeError(msg)
+        else:
+            templ = "Command {0!r} failed with code {1}. Error output is:\n{2}"
+            logger.error(templ.format(cmd, code, err))
diff --git a/log.py b/log.py
deleted file mode 100644
index fdef091..0000000
--- a/log.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import os
-import sys
-import datetime
-
-
-def _log(x):
-    dt_str = datetime.datetime.now().strftime("%H:%M:%S")
-    pref = dt_str + " " + str(os.getpid()) + " >>>> "
-    sys.stderr.write(pref + x.replace("\n", "\n" + pref) + "\n")
-
-
-logger = _log
-
-
-def log(x):
-    logger(x)
-
-
-def setlogger(nlogger):
-    global logger
-    logger = nlogger
diff --git a/report.py b/report.py
index 51049ca..b707b52 100644
--- a/report.py
+++ b/report.py
@@ -102,8 +102,11 @@
         scale_x = []
         for build_id, build_results in value.items():
             legend.append(build_id)
-            ordered_build_results = OrderedDict(sorted(build_results.items(),
-                                                key=lambda t: ssize_to_kb(t[0])))
+
+            OD = OrderedDict
+            ordered_build_results = OD(sorted(build_results.items(),
+                                       key=lambda t: ssize_to_kb(t[0])))
+
             if not scale_x:
                 scale_x = ordered_build_results.keys()
             dataset.append(zip(*ordered_build_results.values())[0])
@@ -141,4 +144,4 @@
 
 
 if __name__ == '__main__':
-    exit(main(sys.argv[1:]))
\ No newline at end of file
+    exit(main(sys.argv[1:]))
diff --git a/run_test.py b/run_test.py
index d3f5707..2d0c224 100644
--- a/run_test.py
+++ b/run_test.py
@@ -3,6 +3,7 @@
 import json
 import time
 import pprint
+import logging
 import os.path
 import argparse
 import traceback
@@ -17,6 +18,18 @@
 from starts_vms import nova_connect, create_vms_mt, clear_all
 
 
+logger = logging.getLogger("io-perf-tool")
+logger.setLevel(logging.DEBUG)
+ch = logging.StreamHandler()
+ch.setLevel(logging.DEBUG)
+logger.addHandler(ch)
+
+log_format = '%(asctime)s - %(levelname)s - %(name)s - %(message)s'
+formatter = logging.Formatter(log_format,
+                              "%H:%M:%S")
+ch.setFormatter(formatter)
+
+
 def run_io_test(tool,
                 script_args,
                 test_runner,
@@ -73,7 +86,7 @@
     return parser.parse_args(argv)
 
 
-def print_measurements_stat(res):
+def format_measurements_stat(res):
     if len(res) != 0:
         bw_mean = 0.0
         for measurement in res:
@@ -89,10 +102,9 @@
                                     's' if meta['sync'] else 'a',
                                     meta['blocksize'])
 
-        print
-        print "====> " + json.dumps({key: (int(bw_mean), int(bw_dev))})
-        print
-        print "=" * 80
+        data = json.dumps({key: (int(bw_mean), int(bw_dev))})
+
+        return "\n====> {0}\n\n{1}\n".format(data, "=" * 80)
 
 
 def get_io_opts(io_opts_file, io_opts):
@@ -113,9 +125,10 @@
         opt_lines = [i for i in opt_lines if i != "" and not i.startswith("#")]
 
         for opt_line in opt_lines:
-            io_opts.append([opt.strip()
-                           for opt in opt_line.split(" ")
-                           if opt.strip() != ""])
+            if opt_line.strip() != "":
+                io_opts.append([opt.strip()
+                               for opt in opt_line.strip().split(" ")
+                               if opt.strip() != ""])
     else:
         io_opts = [[opt.strip()
                    for opt in io_opts.split(" ")
@@ -129,6 +142,13 @@
     return io_opts
 
 
+def format_result(res):
+    data = "\n{0}\n".format("=" * 80)
+    data += pprint.pformat(res) + "\n"
+    data += "{0}\n".format("=" * 80)
+    return data + "\n" + format_measurements_stat(res) + "\n"
+
+
 def main(argv):
     opts = parse_args(argv)
 
@@ -141,7 +161,12 @@
     io_opts = get_io_opts(opts.io_opts_file, opts.io_opts)
 
     if opts.runner == "rally":
+        logger.debug("Use rally runner")
         for script_args in io_opts:
+
+            cmd_line = " ".join(script_args)
+            logger.debug("Run test with {0!r} params".format(cmd_line))
+
             runner = rally_runner.get_rally_runner(
                 files_dir=os.path.dirname(io_scenario.__file__),
                 rally_extra_opts=opts.runner_opts.split(" "),
@@ -152,14 +177,10 @@
                               script_args,
                               runner,
                               opts.keep_temp_files)
-
-            print "=" * 80
-            print pprint.pformat(res)
-            print "=" * 80
-
-            print_measurements_stat(res)
+            logger.debug(format_result(res))
 
     elif opts.runner == "ssh":
+        logger.debug("Use ssh runner")
         create_vms_opts = {}
         for opt in opts.runner_opts.split(","):
             name, val = opt.split("=", 1)
@@ -170,11 +191,13 @@
         aff_group = create_vms_opts.pop("aff_group", None)
         raw_count = create_vms_opts.pop("count", "x1")
 
+        logger.debug("Connection to nova")
         nova = nova_connect()
 
         if raw_count.startswith("x"):
+            logger.debug("Getting amount of compute services")
             count = len(nova.services.list(binary="nova-compute"))
-            count *= int(raw_count)
+            count *= int(raw_count[1:])
         else:
             count = int(raw_count)
 
@@ -185,19 +208,22 @@
 
         create_vms_opts['scheduler_hints'] = scheduler_hints
 
-        latest_start_time = opts.max_preparation_time + time.time()
-
         # nova, amount, keypair_name, img_name,
         # flavor_name, vol_sz=None, network_zone_name=None,
         # flt_ip_pool=None, name_templ='ceph-test-{}',
         # scheduler_hints=None
 
+        logger.debug("Will start {} vms".format(count))
+
         try:
             ips = [i[0] for i in create_vms_mt(nova, count, **create_vms_opts)]
 
             uris = ["{0}@{1}::{2}".format(user, ip, key_file) for ip in ips]
 
             for script_args in io_opts:
+                cmd_line = " ".join(script_args)
+                logger.debug("Run test with {0!r} params".format(cmd_line))
+                latest_start_time = opts.max_preparation_time + time.time()
                 runner = ssh_runner.get_ssh_runner(uris,
                                                    latest_start_time,
                                                    opts.keep_temp_files)
@@ -205,28 +231,16 @@
                                   script_args,
                                   runner,
                                   opts.keep_temp_files)
-                print "=" * 80
-                print pprint.pformat(res)
-                print "=" * 80
+                logger.debug(format_result(res))
 
-                print_measurements_stat(res)
         except:
             traceback.print_exc()
         finally:
+            logger.debug("Clearing")
             clear_all(nova)
 
     return 0
 
 
-ostack_prepare = """
-glance image-create --name 'ubuntu' --disk-format qcow2
---container-format bare --is-public true --copy-from
-https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-
-nova flavor-create ceph.512 ceph.512 512 50 1
-nova server-group-create --policy anti-affinity ceph
-"""
-
-
 if __name__ == '__main__':
     exit(main(sys.argv[1:]))
diff --git a/scripts/data.py b/scripts/data.py
index c53871d..0635789 100644
--- a/scripts/data.py
+++ b/scripts/data.py
@@ -11,8 +11,16 @@
 
     for block in re.split(splitter_rr, fc):
         block = block.strip()
+
         if not block.startswith("[{u'__meta__':"):
             continue
+
+        print
+        print
+        print block
+        print
+        print
+
         for val in eval(block):
             meta = val['__meta__']
             meta['sync'] = 's' if meta['sync'] else 'a'
diff --git a/scripts/run.sh b/scripts/run.sh
index a5c8aaf..11c90ee 100644
--- a/scripts/run.sh
+++ b/scripts/run.sh
@@ -3,12 +3,11 @@
 
 type="iozone"
 
-bsizes="1k" # 4k 64k 256k 1m
-ops="write" # randwrite"
+bsizes="1k 4k 64k 256k 1m"
+ops="randwrite"
 osync="s" # a
-num_times="1"
-concurrences="1 2 4 8 16 32 64 128"
-aff_group="0077d59c-bf5b-4326-8940-027e77d655ee"
+num_times="3"
+concurrences="32"
 
 for concurrence in $concurrences; do
 	for bsize in $bsizes ; do
@@ -31,12 +30,14 @@
 						factor="r2"
 					fi
 
-					extra_opts="user=ubuntu,keypair_name=ceph,img_name=ubuntu,flavor_name=ceph.512"
-					extra_opts="${extra_opts},network_zone_name=net04,flt_ip_pool=net04_ext,key_file=ceph.pem"
-					extra_opts="${extra_opts},aff_group=${aff_group}"
 
 					io_opts="--type $type -a $op --iodepth 16 --blocksize $bsize --iosize $factor $ssync --concurrency $concurrence"
 
+					# aff_group=$(nova server-group-list | grep ' ceph ' | awk '{print $2}')
+					# extra_opts="user=ubuntu,keypair_name=ceph,img_name=ubuntu,flavor_name=ceph.512"
+					# extra_opts="${extra_opts},network_zone_name=net04,flt_ip_pool=net04_ext,key_file=ceph.pem"
+					# extra_opts="${extra_opts},aff_group=${aff_group},count=x1"
+
 					echo $io_opts
 					# python run_test.py --runner ssh -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="$extra_opts"
 
diff --git a/scripts/run_2.sh b/scripts/run_2.sh
index d343d69..cdf29dc 100644
--- a/scripts/run_2.sh
+++ b/scripts/run_2.sh
@@ -1,43 +1,52 @@
 #!/bin/bash
 set -x
 
+function prepare() {
+	nova image-list | grep ' ubuntu ' >/dev/null
+	if [ $? -ne 0 ] ; then
+		url="https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img"
+		glance image-create --name 'ubuntu' --disk-format qcow2 --container-format bare --is-public true --copy-from $url
+	fi
+
+	nova flavor-list | grep ' ceph.512 ' >/dev/null
+	if [ $? -ne 0 ] ; then
+		nova flavor-create ceph.512 ceph.512 512 50 1
+	fi
+
+	nova server-group-list | grep ' ceph ' >/dev/null
+	if [ $? -ne 0 ] ; then
+		nova server-group-create --policy anti-affinity ceph
+	fi
+
+	nova keypair-list | grep ' ceph ' >/dev/null
+	if [ $? -ne 0 ] ; then
+		nova keypair-add ceph > ceph.pem
+	fi
+
+	nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
+	nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 
+}
+
+
+function run_test() {
+	set -e
+
+	iodepts="1"
+	for iodepth in $iodepts; do
+		extra_opts="user=ubuntu,keypair_name=ceph,img_name=ubuntu,flavor_name=ceph.512"
+		extra_opts="${extra_opts},network_zone_name=net04,flt_ip_pool=net04_ext,key_file=ceph.pem"
+		extra_opts="${extra_opts},aff_group=${aff_group},count=x1"
+
+		io_opts="--type $type -a write --iodepth 16 --blocksize 1m --iosize x20"
+		python run_test.py --runner ssh -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="$extra_opts"
+	done
+
+	# io_opts="--type $type -a write --iodepth 16 --blocksize 1m --iosize x20"
+	# python run_test.py --runner rally -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="--deployment perf-1"
+}
+
 type="iozone"
-
-# nova image-list | grep ' ubuntu ' >/dev/null
-# if [ $? -ne 0 ] ; then
-# 	url="https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img"
-# 	glance image-create --name 'ubuntu' --disk-format qcow2 --container-format bare --is-public true --copy-from $url
-# fi
-
-# nova flavor-list | grep ' ceph.512 ' >/dev/null
-# if [ $? -ne 0 ] ; then
-# 	nova flavor-create ceph.512 ceph.512 512 50 1
-# fi
-
-# nova server-group-list | grep ' ceph ' >/dev/null
-# if [ $? -ne 0 ] ; then
-# 	nova server-group-create --policy anti-affinity ceph
-# fi
-
-# nova keypair-list | grep ' ceph ' >/dev/null
-# if [ $? -ne 0 ] ; then
-# 	nova keypair-add ceph > ceph.pem
-# fi
-
+prepare
+# run_test
 # nova server-group-list | grep ' ceph ' | awk '{print $2}'
-aff_group="0077d59c-bf5b-4326-8940-027e77d655ee"
-
-set -e
-
-iodepts="1"
-for iodepth in $iodepts; do
-	extra_opts="user=ubuntu,keypair_name=ceph,img_name=ubuntu,flavor_name=ceph.512"
-	extra_opts="${extra_opts},network_zone_name=net04,flt_ip_pool=net04_ext,key_file=ceph.pem"
-	extra_opts="${extra_opts},aff_group=${aff_group}"
-
-	io_opts="--type $type -a write --iodepth 16 --blocksize 1m --iosize x20"
-	python run_test.py --runner ssh -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="$extra_opts"
-done
-
-# io_opts="--type $type -a write --iodepth 16 --blocksize 1m --iosize x20"
-# python run_test.py --runner rally -l -o "$io_opts" -t io-scenario $type --runner-extra-opts="--deployment perf-1"
+# aff_group="0077d59c-bf5b-4326-8940-027e77d655ee"
diff --git a/ssh_runner.py b/ssh_runner.py
index c7ba9a9..d5d7aca 100644
--- a/ssh_runner.py
+++ b/ssh_runner.py
@@ -1,5 +1,6 @@
 import re
 import Queue
+import logging
 import traceback
 import threading
 from concurrent.futures import ThreadPoolExecutor
@@ -9,6 +10,9 @@
 import itest
 from utils import get_barrier, log_error, wait_on_barrier
 
+
+logger = logging.getLogger("io-perf-tool")
+
 conn_uri_attrs = ("user", "passwd", "host", "port", "path")
 
 
@@ -90,8 +94,10 @@
                    latest_start_time=None,
                    keep_temp_files=False):
 
+    logger.debug("Connecting to servers")
+
     with ThreadPoolExecutor(max_workers=16) as executor:
-        connections = executor.map(connect, uris)
+        connections = list(executor.map(connect, uris))
 
     result_queue = Queue.Queue()
     barrier = get_barrier(len(uris), threaded=True)
@@ -102,6 +108,7 @@
 
         params = (obj, barrier, latest_start_time)
 
+        logger.debug("Start tests")
         for conn in connections:
             th = threading.Thread(None, conn_func, None,
                                   params + (conn,))
@@ -116,6 +123,7 @@
         while not result_queue.empty():
             test_result.append(result_queue.get())
 
+        logger.debug("Done. Closing connection")
         for conn in connections:
             conn.close()
 
diff --git a/starts_vms.py b/starts_vms.py
index dbade23..368aadf 100644
--- a/starts_vms.py
+++ b/starts_vms.py
@@ -1,6 +1,7 @@
 import re
 import os
 import time
+import logging
 
 from concurrent.futures import ThreadPoolExecutor
 
@@ -8,6 +9,9 @@
 from cinderclient.v1.client import Client as c_client
 
 
+logger = logging.getLogger("io-perf-tool")
+
+
 def ostack_get_creds():
     env = os.environ.get
     name = env('OS_USERNAME')
@@ -33,7 +37,7 @@
     while vol.status != 'available':
         if vol.status == 'error':
             if err_count == 3:
-                print "Fail to create volume"
+                logger.critical("Fail to create volume")
                 raise RuntimeError("Fail to create volume")
             else:
                 err_count += 1
@@ -99,30 +103,36 @@
             ips_future = None
 
         if ips_future is not None:
+            logger.debug("Wait for floating ip")
             ips = ips_future.result()
             ips += [Allocate] * (amount - len(ips))
         else:
             ips = [None] * amount
 
+        logger.debug("Getting for flavor object")
         fl = fl_future.result()
+        logger.debug("Getting for image object")
         img = img_future.result()
 
         if network_future is not None:
+            logger.debug("Waiting for network results")
             nics = [{'net-id': network_future.result().id}]
         else:
             nics = None
 
-        print "Try to start {0} servers".format(amount)
         names = map(name_templ.format, range(amount))
 
         futures = []
+        logger.debug("Requesting new vm")
         for name, flt_ip in zip(names, ips):
             params = (nova, name, keypair_name, img, fl,
                       nics, vol_sz, flt_ip, scheduler_hints,
                       flt_ip_pool)
 
             futures.append(executor.submit(create_vm, *params))
-        return [future.result() for future in futures]
+        res = [future.result() for future in futures]
+        logger.debug("Done spawning")
+        return res
 
 
 def create_vm(nova, name, keypair_name, img,
@@ -138,7 +148,7 @@
 
         if not wait_for_server_active(nova, srv):
             msg = "Server {0} fails to start. Kill it and try again"
-            print msg.format(srv.name)
+            logger.debug(msg.format(srv))
             nova.servers.delete(srv)
 
             while True:
@@ -171,15 +181,15 @@
     deleted_srvs = set()
     for srv in nova.servers.list():
         if re.match(name_templ.format("\\d+"), srv.name):
-            print "Deleting server", srv.name
+            logger.debug("Deleting server {0}".format(srv.name))
             nova.servers.delete(srv)
             deleted_srvs.add(srv.id)
 
     while deleted_srvs != set():
-        print "Waiting till all servers are actually deleted"
+        logger.debug("Waiting till all servers are actually deleted")
         all_id = set(srv.id for srv in nova.servers.list())
         if all_id.intersection(deleted_srvs) == set():
-            print "Done, deleting volumes"
+            logger.debug("Done, deleting volumes")
             break
         time.sleep(1)
 
@@ -193,7 +203,7 @@
                     print "Deleting volume", vol.display_name
                     cinder.volumes.delete(vol)
 
-    print "Clearing done (yet some volumes may still deleting)"
+    logger.debug("Clearing done (yet some volumes may still deleting)")
 
 
 # def prepare_host(key_file, ip, fio_path, dst_fio_path, user='cirros'):
@@ -218,33 +228,33 @@
 #     exec_on_host("sudo /bin/chmod a+rwx /media/ceph")
 
 
-def main():
-    image_name = 'TestVM'
-    flavor_name = 'ceph'
-    vol_sz = 50
-    network_zone_name = 'net04'
-    amount = 10
-    keypair_name = 'ceph-test'
+# def main():
+#     image_name = 'TestVM'
+#     flavor_name = 'ceph'
+#     vol_sz = 50
+#     network_zone_name = 'net04'
+#     amount = 10
+#     keypair_name = 'ceph-test'
 
-    nova = nova_connect()
-    clear_all(nova)
+#     nova = nova_connect()
+#     clear_all(nova)
 
-    try:
-        ips = []
-        params = dict(vol_sz=vol_sz)
-        params['image_name'] = image_name
-        params['flavor_name'] = flavor_name
-        params['network_zone_name'] = network_zone_name
-        params['amount'] = amount
-        params['keypair_name'] = keypair_name
+#     try:
+#         ips = []
+#         params = dict(vol_sz=vol_sz)
+#         params['image_name'] = image_name
+#         params['flavor_name'] = flavor_name
+#         params['network_zone_name'] = network_zone_name
+#         params['amount'] = amount
+#         params['keypair_name'] = keypair_name
 
-        for ip, host in create_vms(nova, **params):
-            ips.append(ip)
+#         for ip, host in create_vms(nova, **params):
+#             ips.append(ip)
 
-        print "All setup done! Ips =", " ".join(ips)
-        print "Starting tests"
-    finally:
-        clear_all(nova)
+#         print "All setup done! Ips =", " ".join(ips)
+#         print "Starting tests"
+#     finally:
+#         clear_all(nova)
 
-if __name__ == "__main__":
-    exit(main())
+# if __name__ == "__main__":
+#     exit(main())
diff --git a/utils.py b/utils.py
index 5cc1ac2..a6fbe09 100644
--- a/utils.py
+++ b/utils.py
@@ -1,11 +1,13 @@
 import time
+import logging
 import threading
 import contextlib
 import multiprocessing
 
 import paramiko
 
-from log import log
+
+logger = logging.getLogger("io-perf-tool")
 
 
 def get_barrier(count, threaded=False):
@@ -56,16 +58,16 @@
         if timeout is not None and timeout > 0:
             msg = "Ready and waiting on barrier. " + \
                   "Will wait at most {0} seconds"
-            log(msg.format(int(timeout)))
+            logger.debug(msg.format(int(timeout)))
 
             if not barrier(timeout):
-                log("Barrier timeouted")
+                logger.debug("Barrier timeouted")
 
 
 @contextlib.contextmanager
 def log_error(action, types=(Exception,)):
     if not action.startswith("!"):
-        log("Starts : " + action)
+        logger.debug("Starts : " + action)
     else:
         action = action[1:]
 
@@ -74,7 +76,7 @@
     except Exception as exc:
         if isinstance(exc, types) and not isinstance(exc, StopIteration):
             templ = "Error during {0} stage: {1}"
-            log(templ.format(action, exc.message))
+            logger.debug(templ.format(action, exc.message))
         raise