diff --git a/loader/loader.c b/loader/loader.c
index fad8f24..eb8619f 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -67,6 +67,17 @@
 /* TODO: do we need to lock around access to linked lists and such? */
 struct loader_struct loader = {0};
 
+enum loader_debug {
+    LOADER_INFO_BIT       = VK_BIT(0),
+    LOADER_WARN_BIT       = VK_BIT(1),
+    LOADER_PERF_BIT       = VK_BIT(2),
+    LOADER_ERROR_BIT      = VK_BIT(3),
+    LOADER_DEBUG_BIT      = VK_BIT(4),
+};
+
+uint32_t g_loader_debug = 0;
+uint32_t g_loader_log_msgs = 0;
+
 VkLayerInstanceDispatchTable instance_disp = {
     .GetInstanceProcAddr = vkGetInstanceProcAddr,
     .CreateInstance = loader_CreateInstance,
@@ -195,6 +206,10 @@
     va_list ap;
     int ret;
 
+    if (!(msg_code & g_loader_log_msgs)) {
+        return;
+    }
+
     va_start(ap, format);
     ret = vsnprintf(msg, sizeof(msg), format, ap);
     if ((ret >= (int) sizeof(msg)) || ret < 0) {
@@ -203,11 +218,10 @@
     va_end(ap);
 
 #if defined(WIN32)
-	OutputDebugString(msg);
+        OutputDebugString(msg);
 #endif
     fputs(msg, stderr);
     fputc('\n', stderr);
-
 }
 
 bool compare_vk_extension_properties(const VkExtensionProperties *op1, const VkExtensionProperties *op2)
@@ -625,6 +639,52 @@
     return;
 }
 
+static void loader_debug_init(void)
+{
+    const char *env;
+
+    if (g_loader_debug > 0)
+        return;
+
+    g_loader_debug = 0;
+
+    /* parse comma-separated debug options */
+    env = getenv("LOADER_DEBUG");
+    while (env) {
+        const char *p = strchr(env, ',');
+        size_t len;
+
+        if (p)
+            len = p - env;
+        else
+            len = strlen(env);
+
+        if (len > 0) {
+            if (strncmp(env, "warn", len) == 0) {
+                g_loader_debug |= LOADER_WARN_BIT;
+                g_loader_log_msgs |= VK_DBG_REPORT_WARN_BIT;
+            } else if (strncmp(env, "info", len) == 0) {
+                g_loader_debug |= LOADER_INFO_BIT;
+                g_loader_log_msgs |= VK_DBG_REPORT_INFO_BIT;
+            } else if (strncmp(env, "perf", len) == 0) {
+                g_loader_debug |= LOADER_PERF_BIT;
+                g_loader_log_msgs |= VK_DBG_REPORT_PERF_WARN_BIT;
+            } else if (strncmp(env, "error", len) == 0) {
+                g_loader_debug |= LOADER_ERROR_BIT;
+                g_loader_log_msgs |= VK_DBG_REPORT_ERROR_BIT;
+            } else if (strncmp(env, "debug", len) == 0) {
+                g_loader_debug |= LOADER_DEBUG_BIT;
+                g_loader_log_msgs |= VK_DBG_REPORT_DEBUG_BIT;
+            }
+        }
+
+        if (!p)
+            break;
+
+        env = p + 1;
+    }
+}
+
 /**
  * Try to \c loader_icd_scan VK driver(s).
  *
@@ -664,6 +724,8 @@
     }
 #endif // WIN32
 
+    loader_debug_init();
+
     for (p = libPaths; *p; p = next) {
        next = strchr(p, PATH_SEPERATOR);
        if (next == NULL) {
@@ -848,7 +910,7 @@
 
                         strcpy(loader.scanned_layers[count].lib_name, temp_str);
 
-                        fprintf(stderr, "Collecting global extensions for %s\n", temp_str);
+                        loader_log(VK_DBG_REPORT_DEBUG_BIT, 0, "Collecting global extensions for %s\n", temp_str);
                         get_global_extensions(
                                     fp_get_ext,
                                     "vkGetGlobalExtensionInfo",
