diff --git a/src/emuvim/api/openstack/openstack_dummies/base_openstack_dummy.py b/src/emuvim/api/openstack/openstack_dummies/base_openstack_dummy.py
index a2c4714..714b727 100755
--- a/src/emuvim/api/openstack/openstack_dummies/base_openstack_dummy.py
+++ b/src/emuvim/api/openstack/openstack_dummies/base_openstack_dummy.py
@@ -2,6 +2,8 @@
 from flask_restful import Api, Resource
 import logging
 
+LOG = logging.getLogger("api.openstack.base")
+
 
 class BaseOpenstackDummy(Resource):
     """
@@ -22,7 +24,7 @@
         self.api = Api(self.app)
 
     def _start_flask(self):
-        logging.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
+        LOG.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
         if self.app is not None:
             self.app.before_request(self.dump_playbook)
             self.app.run(self.ip, self.port, debug=True, use_reloader=False)
diff --git a/src/emuvim/api/openstack/openstack_dummies/glance_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/glance_dummy_api.py
index e4b49b2..4b9b9c6 100755
--- a/src/emuvim/api/openstack/openstack_dummies/glance_dummy_api.py
+++ b/src/emuvim/api/openstack/openstack_dummies/glance_dummy_api.py
@@ -5,6 +5,9 @@
 import json
 
 
+LOG = logging.getLogger("api.openstack.glance")
+
+
 class GlanceDummyApi(BaseOpenstackDummy):
     def __init__(self, in_ip, in_port, compute):
         super(GlanceDummyApi, self).__init__(in_ip, in_port)
@@ -29,7 +32,7 @@
                               resource_class_kwargs={'api': self})
 
     def _start_flask(self):
-        logging.info("Starting %s endpoint @ http://%s:%d" % ("GlanceDummyApi", self.ip, self.port))
+        LOG.info("Starting %s endpoint @ http://%s:%d" % ("GlanceDummyApi", self.ip, self.port))
         if self.app is not None:
             self.app.before_request(self.dump_playbook)
             self.app.run(self.ip, self.port, debug=True, use_reloader=False)
@@ -37,7 +40,7 @@
 
 class Shutdown(Resource):
     def get(self):
-        logging.debug(("%s is beeing shut down") % (__name__))
+        LOG.debug(("%s is beeing shut down") % (__name__))
         func = request.environ.get('werkzeug.server.shutdown')
         if func is None:
             raise RuntimeError('Not running with the Werkzeug Server')
@@ -46,7 +49,7 @@
 
 class GlanceListApiVersions(Resource):
     def get(self):
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         resp = dict()
         resp['versions'] = dict()
         versions = [{
@@ -65,7 +68,7 @@
 
 class GlanceSchema(Resource):
     def get(self):
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         resp = dict()
         resp['name'] = 'someImageName'
         resp['properties'] = dict()
@@ -78,7 +81,7 @@
         self.api = api
 
     def get(self):
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:           
             resp = dict()
             resp['next'] = None
@@ -117,7 +120,7 @@
             return Response(json.dumps(resp), status=200, mimetype="application/json")
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of images." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of images." % __name__)
             return ex.message, 500
 
     def post(self):
@@ -126,7 +129,7 @@
         should already be registered with Docker. However, this function returns a reply that looks
         like the image was just created to make orchestrators, like OSM, happy.
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         # lets see what we should create
         img_name = request.headers.get("X-Image-Meta-Name")
         img_size = request.headers.get("X-Image-Meta-Size")
@@ -138,8 +141,8 @@
         for image in self.api.compute.images.values():
             if img_name in image.name:
                 img_id = image.id
-        logging.debug("Image name: %s" % img_name)
-        logging.debug("Image id: %s" % img_id)
+        LOG.debug("Image name: %s" % img_name)
+        LOG.debug("Image id: %s" % img_id)
         # build a response body that looks like a real one
         resp = dict()
         f = dict()
@@ -175,14 +178,14 @@
         self.api = api
 
     def get(self, id):
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         from emuvim.api.heat.openstack_dummies.nova_dummy_api import NovaListImages
         nova = NovaListImages(self.api)
         return nova.get(id)
 
     def put(self, id):
-        logging.debug("API CALL: %s " % str(self.__class__.__name__))
-        logging.warning("Endpoint not implemented")
+        LOG.debug("API CALL: %s " % str(self.__class__.__name__))
+        LOG.warning("Endpoint not implemented")
         return None
 
 
diff --git a/src/emuvim/api/openstack/openstack_dummies/heat_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/heat_dummy_api.py
index f696442..2c7bdf3 100755
--- a/src/emuvim/api/openstack/openstack_dummies/heat_dummy_api.py
+++ b/src/emuvim/api/openstack/openstack_dummies/heat_dummy_api.py
@@ -8,6 +8,9 @@
 import json
 
 
+LOG = logging.getLogger("api.openstack.heat")
+
+
 class HeatDummyApi(BaseOpenstackDummy):
     def __init__(self, in_ip, in_port, compute):
         super(HeatDummyApi, self).__init__(in_ip, in_port)
@@ -35,7 +38,7 @@
 
 
     def _start_flask(self):
-        logging.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
+        LOG.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
         if self.app is not None:
             self.app.before_request(self.dump_playbook)
             self.app.run(self.ip, self.port, debug=True, use_reloader=False)
@@ -47,7 +50,7 @@
     """
 
     def get(self):
-        logging.debug(("%s is beeing shut down") % (__name__))
+        LOG.debug(("%s is beeing shut down") % (__name__))
         func = request.environ.get('werkzeug.server.shutdown')
         if func is None:
             raise RuntimeError('Not running with the Werkzeug Server')
@@ -59,7 +62,7 @@
         self.api = api
 
     def get(self):
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         resp = dict()
 
         resp['versions'] = dict()
@@ -91,7 +94,7 @@
             500, if any exception occurred while creation.
             201, if everything worked out.
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
 
         try:
             stack_dict = json.loads(request.data)
@@ -124,7 +127,7 @@
             return Response(json.dumps(return_dict), status=201, mimetype="application/json")
 
         except Exception as ex:
-            logging.exception("Heat: Create Stack exception.")
+            LOG.exception("Heat: Create Stack exception.")
             return ex.message, 500
 
     def get(self, tenant_id):
@@ -136,7 +139,7 @@
             500, if any exception occurred.
             200, if everything worked out.
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             return_stacks = dict()
             return_stacks['stacks'] = list()
@@ -155,7 +158,7 @@
 
             return Response(json.dumps(return_stacks), status=200, mimetype="application/json")
         except Exception as ex:
-            logging.exception("Heat: List Stack exception.")
+            LOG.exception("Heat: List Stack exception.")
             return ex.message, 500
 
 
@@ -174,7 +177,7 @@
             500, if any exception occurred.
             200, if everything worked out.
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             stack = None
             if stack_name_or_id in self.api.compute.stacks:
@@ -223,7 +226,7 @@
             return Response(json.dumps(return_stack), status=200, mimetype="application/json")
 
         except Exception as ex:
-            logging.exception("Heat: Show stack exception.")
+            LOG.exception("Heat: Show stack exception.")
             return ex.message, 500
 
 
@@ -243,7 +246,7 @@
             500, if any exception occurred while updating.
             202, if everything worked out.
         """
-        logging.debug("API CALL: %s PUT" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__))
         try:
             old_stack = None
             if stack_name_or_id in self.api.compute.stacks:
@@ -276,7 +279,7 @@
             return Response(status=202, mimetype="application/json")
 
         except Exception as ex:
-            logging.exception("Heat: Update Stack exception")
+            LOG.exception("Heat: Update Stack exception")
             return ex.message, 500
 
 
@@ -294,7 +297,7 @@
         :return: 500, if any exception occurred while deletion.
             204, if everything worked out.
         """
-        logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
         try:
             if stack_name_or_id in self.api.compute.stacks:
                 self.api.compute.delete_stack(stack_name_or_id)
@@ -306,5 +309,5 @@
                     return Response('Deleted Stack: ' + stack_name_or_id, 204)
 
         except Exception as ex:
-            logging.exception("Heat: Delete Stack exception")
+            LOG.exception("Heat: Delete Stack exception")
             return ex.message, 500
diff --git a/src/emuvim/api/openstack/openstack_dummies/keystone_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/keystone_dummy_api.py
index 26987f0..7abf9c4 100755
--- a/src/emuvim/api/openstack/openstack_dummies/keystone_dummy_api.py
+++ b/src/emuvim/api/openstack/openstack_dummies/keystone_dummy_api.py
@@ -4,6 +4,8 @@
 import logging
 import json
 
+LOG = logging.getLogger("api.openstack.keystone")
+
 
 class KeystoneDummyApi(BaseOpenstackDummy):
     def __init__(self, in_ip, in_port):
@@ -17,7 +19,7 @@
         self.api.add_resource(KeystoneGetTokenv3, "/v3/auth/tokens", resource_class_kwargs={'api': self})
 
     def _start_flask(self):
-        logging.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
+        LOG.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
         if self.app is not None:
             self.app.before_request(self.dump_playbook)
             self.app.run(self.ip, self.port, debug=True, use_reloader=False)
@@ -29,7 +31,7 @@
     """
 
     def get(self):
-        logging.debug(("%s is beeing shut down") % (__name__))
+        LOG.debug(("%s is beeing shut down") % (__name__))
         func = request.environ.get('werkzeug.server.shutdown')
         if func is None:
             raise RuntimeError('Not running with the Werkzeug Server')
@@ -52,7 +54,7 @@
         :return: Returns the api versions.
         :rtype: :class:`flask.response` containing a static json encoded dict.
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         resp = dict()
         resp['versions'] = dict()
 
@@ -94,7 +96,7 @@
         :return: Returns an openstack style response for all entrypoints.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
 
         neutron_port = self.api.port + 4696
         heat_port = self.api.port + 3004
@@ -156,7 +158,7 @@
         :return: Returns an openstack style response for all entrypoints.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
 
         neutron_port = self.api.port + 4696
         heat_port = self.api.port + 3004
@@ -228,7 +230,7 @@
         :rtype: :class:`flask.response`
         """
 
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             ret = dict()
             req = json.loads(request.data)
@@ -371,7 +373,7 @@
         :rtype: :class:`flask.response`
         """
 
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             ret = dict()
             req = json.loads(request.data)
diff --git a/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py
index 38a5ad4..ca1ff3d 100755
--- a/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py
+++ b/src/emuvim/api/openstack/openstack_dummies/neutron_dummy_api.py
@@ -8,6 +8,9 @@
 import copy
 
 
+LOG = logging.getLogger("api.openstack.neutron")
+
+
 class NeutronDummyApi(BaseOpenstackDummy):
     def __init__(self, ip, port, compute):
         super(NeutronDummyApi, self).__init__(ip, port)
@@ -50,7 +53,7 @@
                               resource_class_kwargs={'api': self})
 
     def _start_flask(self):
-        logging.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
+        LOG.info("Starting %s endpoint @ http://%s:%d" % (__name__, self.ip, self.port))
         if self.app is not None:
             self.app.before_request(self.dump_playbook)
             self.app.run(self.ip, self.port, debug=True, use_reloader=False)
@@ -58,7 +61,7 @@
 
 class Shutdown(Resource):
     def get(self):
-        logging.debug(("%s is beeing shut down") % (__name__))
+        LOG.debug(("%s is beeing shut down") % (__name__))
         func = request.environ.get('werkzeug.server.shutdown')
         if func is None:
             raise RuntimeError('Not running with the Werkzeug Server')
@@ -73,7 +76,7 @@
         :return: Returns a json with API versions.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: Neutron - List API Versions")
+        LOG.debug("API CALL: Neutron - List API Versions")
         resp = dict()
         resp['versions'] = dict()
 
@@ -100,7 +103,7 @@
         :return: Returns a json with API details.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         resp = dict()
 
         resp['resources'] = dict()
@@ -151,7 +154,7 @@
         :return: Returns a json response, starting with 'networks' as root node.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             if request.args.get('name'):
                 tmp_network = NeutronShowNetwork(self.api)
@@ -181,7 +184,7 @@
             return Response(json.dumps(network_dict), status=200, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: List networks exception.")
+            LOG.exception("Neutron: List networks exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -198,7 +201,7 @@
         :return: Returns a json response, starting with 'network' as root node and one network description.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         return self.get_network(network_id, False)
 
     def get_network(self, network_name_or_id, as_list):
@@ -245,7 +248,7 @@
             * 201, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             network_dict = json.loads(request.data)
             name = network_dict['network']['name']
@@ -256,7 +259,7 @@
             net = self.api.compute.create_network(name)
             return Response(json.dumps({"network": net.create_network_dict()}), status=201, mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Create network excepiton.")
+            LOG.exception("Neutron: Create network excepiton.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -275,7 +278,7 @@
             * 200, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s PUT" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__))
         try:
             if network_id in self.api.compute.nets:
                 net = self.api.compute.nets[network_id]
@@ -300,7 +303,7 @@
             return Response('Network not found.\n', status=404, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: Show networks exception.")
+            LOG.exception("Neutron: Show networks exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -319,7 +322,7 @@
             * 204, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
         try:
             if network_id not in self.api.compute.nets:
                 return Response('Could not find network. (' + network_id + ')\n',
@@ -336,7 +339,7 @@
 
             return Response('Network ' + str(network_id) + ' deleted.\n', status=204, mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Delete network exception.")
+            LOG.exception("Neutron: Delete network exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -352,7 +355,7 @@
         :return: Returns a json response, starting with 'subnets' as root node.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             if request.args.get('name'):
                 show_subnet = NeutronShowSubnet(self.api)
@@ -381,7 +384,7 @@
             return Response(json.dumps(subnet_dict), status=200, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: List subnets exception.")
+            LOG.exception("Neutron: List subnets exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -398,7 +401,7 @@
         :return: Returns a json response, starting with 'subnet' as root node and one subnet description.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         return self.get_subnet(subnet_id, False)
 
     def get_subnet(self, subnet_name_or_id, as_list):
@@ -426,7 +429,7 @@
             return Response('Subnet not found. (' + subnet_name_or_id + ')\n', status=404, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: Show subnet exception.")
+            LOG.exception("Neutron: Show subnet exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -445,7 +448,7 @@
             * 201, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             subnet_dict = json.loads(request.data)
             net = self.api.compute.find_network_by_name_or_id(subnet_dict['subnet']['network_id'])
@@ -478,7 +481,7 @@
             return Response(json.dumps({'subnet': net.create_subnet_dict()}), status=201, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: Create network excepiton.")
+            LOG.exception("Neutron: Create network excepiton.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -497,7 +500,7 @@
             * 200, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s PUT" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__))
         try:
             for net in self.api.compute.nets.values():
                 if net.subnet_id == subnet_id:
@@ -529,7 +532,7 @@
             return Response('Network not found.\n', status=404, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: Show networks exception.")
+            LOG.exception("Neutron: Show networks exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -548,7 +551,7 @@
             * 204, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
         try:
             for net in self.api.compute.nets.values():
                 if net.subnet_id == subnet_id:
@@ -570,7 +573,7 @@
 
             return Response('Could not find subnet.', status=404, mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Delete subnet exception.")
+            LOG.exception("Neutron: Delete subnet exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -586,7 +589,7 @@
         :return: Returns a json response, starting with 'ports' as root node.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             if request.args.get('name'):
                 show_port = NeutronShowPort(self.api)
@@ -614,7 +617,7 @@
             return Response(json.dumps(port_dict), status=200, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: List ports exception.")
+            LOG.exception("Neutron: List ports exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -631,7 +634,7 @@
         :return: Returns a json response, starting with 'port' as root node and one network description.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         return self.get_port(port_id, False)
 
     def get_port(self, port_name_or_id, as_list):
@@ -657,7 +660,7 @@
                 tmp_dict["port"] = tmp_port_dict
             return Response(json.dumps(tmp_dict), status=200, mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Show port exception.")
+            LOG.exception("Neutron: Show port exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -674,7 +677,7 @@
             * 201, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             port_dict = json.loads(request.data)
             net_id = port_dict['port']['network_id']
@@ -721,7 +724,7 @@
             return Response(json.dumps({'port': port.create_port_dict(self.api.compute)}), status=201,
                             mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Show port exception.")
+            LOG.exception("Neutron: Show port exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -740,7 +743,7 @@
             * 200, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s PUT" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s PUT" % str(self.__class__.__name__))
         try:
             port_dict = json.loads(request.data)
             port = self.api.compute.find_port_by_name_or_id(port_id)
@@ -782,7 +785,7 @@
             return Response(json.dumps({'port': port.create_port_dict(self.api.compute)}), status=200,
                             mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Update port exception.")
+            LOG.exception("Neutron: Update port exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -801,7 +804,7 @@
             * 204, if everything worked out.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s DELETE" % str(self.__class__.__name__))
         try:
             port = self.api.compute.find_port_by_name_or_id(port_id)
             if port is None:
@@ -826,7 +829,7 @@
             return Response('Port ' + port_id + ' deleted.\n', status=204, mimetype='application/json')
 
         except Exception as ex:
-            logging.exception("Neutron: Delete port exception.")
+            LOG.exception("Neutron: Delete port exception.")
             return Response(ex.message, status=500, mimetype='application/json')
 
 
@@ -870,7 +873,7 @@
         :return: Returns a floating network description.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             # Fiddle with floating_network !
             req = json.loads(request.data)
@@ -911,5 +914,5 @@
 
             return Response(json.dumps(response), status=200, mimetype='application/json')
         except Exception as ex:
-            logging.exception("Neutron: Create FloatingIP exception %s.", ex)
+            LOG.exception("Neutron: Create FloatingIP exception %s.", ex)
             return Response(ex.message, status=500, mimetype='application/json')
diff --git a/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py
index 7703d33..3c525f6 100755
--- a/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py
+++ b/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py
@@ -7,6 +7,9 @@
 from mininet.link import Link
 
 
+LOG = logging.getLogger("api.openstack.nova")
+
+
 class NovaDummyApi(BaseOpenstackDummy):
     def __init__(self, in_ip, in_port, compute):
         super(NovaDummyApi, self).__init__(in_ip, in_port)
@@ -43,7 +46,7 @@
                               resource_class_kwargs={'api': self})
 
     def _start_flask(self):
-        logging.info("Starting %s endpoint @ http://%s:%d" % ("NovaDummyApi", self.ip, self.port))
+        LOG.info("Starting %s endpoint @ http://%s:%d" % ("NovaDummyApi", self.ip, self.port))
         # add some flavors for good measure
         self.compute.add_flavor('m1.tiny', 1, 512, "MB", 1, "GB")
         self.compute.add_flavor('m1.nano', 1, 64, "MB", 0, "GB")
@@ -60,7 +63,7 @@
     """
 
     def get(self):
-        logging.debug(("%s is beeing shut doen") % (__name__))
+        LOG.debug(("%s is beeing shut doen") % (__name__))
         func = request.environ.get('werkzeug.server.shutdown')
         if func is None:
             raise RuntimeError('Not running with the Werkzeug Server')
@@ -78,7 +81,7 @@
         :return: Returns a json with API versions.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = """
                 {
@@ -105,7 +108,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not show list of versions." % __name__)
+            LOG.exception(u"%s: Could not show list of versions." % __name__)
             return ex.message, 500
 
 
@@ -122,7 +125,7 @@
         :return: Returns a json with API details.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
 
         try:
             resp = """
@@ -159,7 +162,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not show list of versions." % __name__)
+            LOG.exception(u"%s: Could not show list of versions." % __name__)
             return ex.message, 500
 
 
@@ -176,7 +179,7 @@
         :return: Returns a json response with a dictionary that contains the server information.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
 
         try:
             resp = dict()
@@ -195,7 +198,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of servers." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of servers." % __name__)
             return ex.message, 500
 
     def post(self, id):
@@ -207,7 +210,7 @@
         :return: Returns a flask response, with detailed information about the just created server.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             server_dict = json.loads(request.data)['server']
             networks = server_dict.get('networks', None)
@@ -244,7 +247,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not create the server." % __name__)
+            LOG.exception(u"%s: Could not create the server." % __name__)
             return ex.message, 500
 
 
@@ -262,7 +265,7 @@
         :return: Returns a json response with a dictionary that contains the server information.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
 
         try:
             resp = dict()
@@ -291,7 +294,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of servers." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of servers." % __name__)
             return ex.message, 500
 
 
@@ -309,7 +312,7 @@
         :return: Returns a flask response, with detailed information aboit the servers and their flavor and image.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
 
         try:
             resp = {"servers": list()}
@@ -353,7 +356,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of servers." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of servers." % __name__)
             return ex.message, 500
 
 
@@ -370,7 +373,7 @@
         :return: Returns a flask response with a list of all flavors.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = dict()
             resp['flavors'] = list()
@@ -389,13 +392,13 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of servers." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of servers." % __name__)
             return ex.message, 500
 
     def post(self, id):
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         data = json.loads(request.data).get("flavor")
-        logging.warning("Create Flavor: %s" % str(data))
+        LOG.warning("Create Flavor: %s" % str(data))
         # add to internal dict
         f = self.api.compute.add_flavor(
             data.get("name"),
@@ -425,7 +428,7 @@
         :return: Returns a flask response with a list of all flavors with additional information.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = dict()
             resp['flavors'] = list()
@@ -453,13 +456,13 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of servers." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of servers." % __name__)
             return ex.message, 500
 
     def post(self, id):
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         data = json.loads(request.data).get("flavor")
-        logging.warning("Create Flavor: %s" % str(data))
+        LOG.warning("Create Flavor: %s" % str(data))
         # add to internal dict
         f = self.api.compute.add_flavor(
             data.get("name"),
@@ -491,7 +494,7 @@
         :return: Returns a flask response with detailed information about the flavor.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = dict()
             resp['flavor'] = dict()
@@ -512,7 +515,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve flavor with id %s" % (__name__, flavorid))
+            LOG.exception(u"%s: Could not retrieve flavor with id %s" % (__name__, flavorid))
             return ex.message, 500
 
 
@@ -529,7 +532,7 @@
         :return: Returns a flask response with a list of available images.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = dict()
             resp['images'] = list()
@@ -547,7 +550,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of images." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of images." % __name__)
             return ex.message, 500
 
 
@@ -564,7 +567,7 @@
         :return: Returns a flask response with a list of images and their metadata.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = dict()
             resp['images'] = list()
@@ -591,7 +594,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the list of images." % __name__)
+            LOG.exception(u"%s: Could not retrieve the list of images." % __name__)
             return ex.message, 500
 
 
@@ -610,7 +613,7 @@
         :return: Returns a flask response with the information about one image.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             resp = dict()
             i = resp['image'] = dict()
@@ -626,7 +629,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve image with id %s." % (__name__, imageid))
+            LOG.exception(u"%s: Could not retrieve image with id %s." % (__name__, imageid))
             return ex.message, 500
 
 
@@ -645,7 +648,7 @@
         :return: Returns a flask response with details about the server.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             server = self.api.compute.find_server_by_name_or_id(serverid)
             if server is None:
@@ -688,7 +691,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not retrieve the server details." % __name__)
+            LOG.exception(u"%s: Could not retrieve the server details." % __name__)
             return ex.message, 500
 
     def delete(self, id, serverid):
@@ -702,7 +705,7 @@
         :return: Returns 200 if everything is fine.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s POST" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s POST" % str(self.__class__.__name__))
         try:
             server = self.api.compute.find_server_by_name_or_id(serverid)
             if server is None:
@@ -715,7 +718,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not create the server." % __name__)
+            LOG.exception(u"%s: Could not create the server." % __name__)
             return ex.message, 500
 
 
@@ -734,14 +737,14 @@
         :return: Returns a flask response with information about the attached interface.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             server = self.api.compute.find_server_by_name_or_id(serverid)
             if server is None:
                 return Response("Server with id or name %s does not exists." % serverid, status=404)
 
             if server.emulator_compute is None:
-                logging.error("The targeted container does not exist.")
+                LOG.error("The targeted container does not exist.")
                 return Response("The targeted container of %s does not exist." % serverid, status=404)
             data = json.loads(request.data).get("interfaceAttachment")
             resp = dict()
@@ -798,7 +801,7 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not add interface to the server." % __name__)
+            LOG.exception(u"%s: Could not add interface to the server." % __name__)
             return ex.message, 500
 
 
@@ -820,7 +823,7 @@
          error message.
         :rtype: :class:`flask.response`
         """
-        logging.debug("API CALL: %s GET" % str(self.__class__.__name__))
+        LOG.debug("API CALL: %s GET" % str(self.__class__.__name__))
         try:
             server = self.api.compute.find_server_by_name_or_id(serverid)
             if server is None:
@@ -840,5 +843,5 @@
             return response
 
         except Exception as ex:
-            logging.exception(u"%s: Could not detach interface from the server." % __name__)
+            LOG.exception(u"%s: Could not detach interface from the server." % __name__)
             return ex.message, 500
diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py
index b657660..28a92c4 100755
--- a/src/emuvim/api/rest/compute.py
+++ b/src/emuvim/api/rest/compute.py
@@ -31,7 +31,7 @@
 import json
 from copy import deepcopy
 
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig()
 
 CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
 
diff --git a/src/emuvim/api/rest/monitor.py b/src/emuvim/api/rest/monitor.py
index 30422c1..bf0f26b 100755
--- a/src/emuvim/api/rest/monitor.py
+++ b/src/emuvim/api/rest/monitor.py
@@ -37,7 +37,7 @@
 from flask import request
 import json
 
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig()
 
 CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
 
@@ -326,4 +326,4 @@
             return  str(c), 200, CORS_HEADER
         except Exception as ex:
             logging.exception("API error.")
-            return ex.message, 500, CORS_HEADER
\ No newline at end of file
+            return ex.message, 500, CORS_HEADER
diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py
index 0479ee6..9aab1e6 100755
--- a/src/emuvim/api/rest/network.py
+++ b/src/emuvim/api/rest/network.py
@@ -38,7 +38,7 @@
 import json
 import networkx
 
-logging.basicConfig(level=logging.DEBUG)
+logging.basicConfig()
 
 CORS_HEADER = {'Access-Control-Allow-Origin': '*'}
 
@@ -149,4 +149,4 @@
                 links.append(edge_dict)
 
         json = {"nodes":nodes, "links":links}
-        return json, 200, CORS_HEADER
\ No newline at end of file
+        return json, 200, CORS_HEADER
diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py
index b2a7b86..b5f29d4 100755
--- a/src/emuvim/api/rest/rest_api_endpoint.py
+++ b/src/emuvim/api/rest/rest_api_endpoint.py
@@ -46,7 +46,7 @@
 import pkg_resources
 from os import path
 
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig()
 
 
 class RestApiEndpoint(object):
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index 0d40531..21985cb 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -40,7 +40,7 @@
 import json
 from copy import deepcopy
 
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig()
 
 """
 class to read openflow stats from the Ryu controller of the DCNetwork
