diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index 3dab632aefab6707c64a352cc84fca48679e7420..a90b2945504298cfeee03477d6d31c3183ba1b40 100644
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -180,7 +180,7 @@ LLApp::~LLApp()
 	
 	if(mExceptionHandler != 0) delete mExceptionHandler;
 
-	SUBSYSTEM_CLEANUP(LLCommon);
+	SUBSYSTEM_CLEANUP_DBG(LLCommon);
 }
 
 // static
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
index 984e90f37627116b3f7eb9f2b7ad132c280d830a..db947658719b2aa453310bbb5700e563ad8621be 100644
--- a/indra/llcommon/llapr.cpp
+++ b/indra/llcommon/llapr.cpp
@@ -68,7 +68,7 @@ void ll_cleanup_apr()
 {
 	gAPRInitialized = false;
 
-	LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL;
+	LL_DEBUGS("APR") << "Cleaning up APR" << LL_ENDL;
 
 	LLThreadLocalPointerBase::destroyAllThreadLocalStorage();
 
diff --git a/indra/llcommon/llcleanup.cpp b/indra/llcommon/llcleanup.cpp
index c5283507bfc0d8831aeeae7b6a0cff8e0946c2ec..1f34c2036a3f560febaeb4db17a7d16612b3a1f7 100644
--- a/indra/llcommon/llcleanup.cpp
+++ b/indra/llcommon/llcleanup.cpp
@@ -20,10 +20,13 @@
 #include "llerror.h"
 #include "llerrorcontrol.h"
 
-void log_subsystem_cleanup(const char* file, int line, const char* function,
+void log_subsystem_cleanup(LLError::ELevel level,
+                           const char* file,
+                           int line,
+                           const char* function,
                            const char* classname)
 {
-    LL_INFOS("Cleanup") << LLError::abbreviateFile(file) << "(" << line << "): "
+    LL_VLOGS(level, "Cleanup") << LLError::abbreviateFile(file) << "(" << line << "): "
                         << "calling " << classname << "::cleanupClass() in "
                         << function << LL_ENDL;
 }
diff --git a/indra/llcommon/llcleanup.h b/indra/llcommon/llcleanup.h
index a319171b5f1891d06969585c9f9a75e02ef7149c..0f567ed5f6afcd38e3fb42cc54668cd2556cf3d4 100644
--- a/indra/llcommon/llcleanup.h
+++ b/indra/llcommon/llcleanup.h
@@ -21,13 +21,22 @@
 // shutdown schemes.
 #define SUBSYSTEM_CLEANUP(CLASSNAME)                                    \
     do {                                                                \
-        log_subsystem_cleanup(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, #CLASSNAME); \
+        log_subsystem_cleanup(LLError::LEVEL_INFO, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, #CLASSNAME); \
+        CLASSNAME::cleanupClass();                                      \
+    } while (0)
+
+#define SUBSYSTEM_CLEANUP_DBG(CLASSNAME)                                    \
+    do {                                                                \
+        log_subsystem_cleanup(LLError::LEVEL_DEBUG, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, #CLASSNAME); \
         CLASSNAME::cleanupClass();                                      \
     } while (0)
 // Use ancient do { ... } while (0) macro trick to permit a block of
 // statements with the same syntax as a single statement.
 
-void log_subsystem_cleanup(const char* file, int line, const char* function,
+void log_subsystem_cleanup(LLError::ELevel level,
+                           const char* file,
+                           int line,
+                           const char* function,
                            const char* classname);
 
 #endif /* ! defined(LL_LLCLEANUP_H) */
diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp
index 2d665c611b47418f6594eff3cc5a57e1200ec27b..96be913d17a07cface3713ddf5ae95ecb8557b73 100644
--- a/indra/llcommon/llcommon.cpp
+++ b/indra/llcommon/llcommon.cpp
@@ -63,7 +63,7 @@ void LLCommon::cleanupClass()
 	sMasterThreadRecorder = NULL;
 	LLTrace::set_master_thread_recorder(NULL);
 	LLThreadSafeRefCount::cleanupThreadSafeRefCount();
-	SUBSYSTEM_CLEANUP(LLTimer);
+	SUBSYSTEM_CLEANUP_DBG(LLTimer);
 	if (sAprInitialized)
 	{
 		ll_cleanup_apr();