diff --git a/inventory_provider/app.py b/inventory_provider/app.py
index 7e55c5918b28f9258938742e65e750f6f241c082..557daa6a27e26d07620f24d4af47e916984ee9c5 100644
--- a/inventory_provider/app.py
+++ b/inventory_provider/app.py
@@ -5,13 +5,9 @@ import logging
 import sys
 
 import inventory_provider
-from inventory_provider import constants
+from inventory_provider import environment
 
-logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
-logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.INFO)
-logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
+environment.setup_logging()
 
 app = inventory_provider.create_app()
 
diff --git a/inventory_provider/environment.py b/inventory_provider/environment.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f0be27559c16e4a6d82ab529dbcceb1a26474ed0 100644
--- a/inventory_provider/environment.py
+++ b/inventory_provider/environment.py
@@ -0,0 +1,24 @@
+import logging, os, sys
+from inventory_provider import constants
+
+
+def _level_from_env(var_name, default_level=logging.INFO):
+    level_str = os.getenv(var_name, logging.getLevelName(default_level))
+    numeric_level = getattr(logging, level_str.upper(), default_level)
+    logging.debug('setting %s logging level to %s'
+                  % (var_name, logging.getLevelName(numeric_level)))
+    return numeric_level
+
+
+def setup_logging():
+    logging.basicConfig(
+        stream=sys.stderr,
+        level=_level_from_env('DEFAULT_LOGGING', logging.INFO))
+    logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(
+        _level_from_env('SNMP_LOGGING', logging.INFO))
+    logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(
+        _level_from_env('TASK_LOGGING', logging.INFO))
+    logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(
+        _level_from_env('JUNIPER_LOGGING', logging.INFO))
+    logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(
+        _level_from_env('DATABASE_LOGGING', logging.INFO))
diff --git a/inventory_provider/tasks/app.py b/inventory_provider/tasks/app.py
index a4a68d2fccb847d18844c556bd0a01c0b6136788..15a42327ee55a1058b513bb32f52a5f388069efa 100644
--- a/inventory_provider/tasks/app.py
+++ b/inventory_provider/tasks/app.py
@@ -1,13 +1,4 @@
-import logging
-import sys
-from inventory_provider import constants
 from celery import Celery
 
-logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
-logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
-
 app = Celery("app")
 app.config_from_object("inventory_provider.tasks.config")
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 3458f9e298b8889e667aa1eb41503bb38039b4aa..889097b8dccca22018ebaef22014c0238cb3bfe9 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -1,21 +1,20 @@
 import json
 import logging
+import os
+import sys
 
 from celery import bootsteps, Task
 import redis
-
 from lxml import etree
 
 from inventory_provider.tasks.app import app
 from inventory_provider import config
-from inventory_provider import snmp, juniper
 from inventory_provider import constants
+from inventory_provider import environment
+from inventory_provider import snmp
+from inventory_provider import juniper
 
-logging.basicConfig(level=logging.WARNING)
-logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.INFO)
-logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.INFO)
-logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
+environment.setup_logging()
 
 
 class InventoryTask(Task):
@@ -78,6 +77,10 @@ app.steps['worker'].add(WorkerArgs)
 
 @app.task(bind=InventoryTask)
 def snmp_refresh_interfaces(self, hostname, community):
+    logger = logging.getLogger(constants.TASK_LOGGER_NAME)
+    logger.debug('STARTING: snmp_refresh_interfaces(%r, %r)'
+                 % (hostname, community))
+
     InventoryTask.save_key_json(
         hostname,
         "snmp-interfaces",
@@ -86,10 +89,18 @@ def snmp_refresh_interfaces(self, hostname, community):
             community,
             InventoryTask.config)))
 
+    logger.debug('FINISHED: snmp_refresh_interfaces(%r, %r)'
+                 % (hostname, community))
+
 
 @app.task(bind=InventoryTask)
 def netconf_refresh_config(self, hostname):
+    logger = logging.getLogger(constants.TASK_LOGGER_NAME)
+    logger.debug('STARTING: netconf_refresh_config(%r)' % hostname)
+
     InventoryTask.save_key_etree(
         hostname,
         "netconf",
         juniper.load_config(hostname, InventoryTask.config["ssh"]))
+
+    logger.debug('FINISHED: netconf_refresh_config(%r)' % hostname)