diff --git a/VERSION b/VERSION
index 1c8f011..584f466 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1 @@
-2.1.46
-
+2.1.47
diff --git a/containers/chameleon/Dockerfile.chameleon b/containers/chameleon/Dockerfile.chameleon
index 3db9c58..43291f2 100644
--- a/containers/chameleon/Dockerfile.chameleon
+++ b/containers/chameleon/Dockerfile.chameleon
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/chameleon
-FROM xosproject/xos-base:2.1.46
+FROM xosproject/xos-base:2.1.47
 
 # xos-base already has protoc and dependencies installed
 
diff --git a/containers/xos/Dockerfile.client b/containers/xos/Dockerfile.client
index f15eeef..1649b6f 100644
--- a/containers/xos/Dockerfile.client
+++ b/containers/xos/Dockerfile.client
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-client
-FROM xosproject/xos-libraries:2.1.46
+FROM xosproject/xos-libraries:2.1.47
 
 # Install XOS client
 COPY lib/xos-api /tmp/xos-api
diff --git a/containers/xos/Dockerfile.libraries b/containers/xos/Dockerfile.libraries
index fb4837a..6aa5170 100644
--- a/containers/xos/Dockerfile.libraries
+++ b/containers/xos/Dockerfile.libraries
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-libraries
-FROM xosproject/xos-base:2.1.46
+FROM xosproject/xos-base:2.1.47
 
 # Add libraries
 COPY lib /opt/xos/lib
diff --git a/containers/xos/Dockerfile.synchronizer-base b/containers/xos/Dockerfile.synchronizer-base
index 5b0d5f4..a2ff068 100644
--- a/containers/xos/Dockerfile.synchronizer-base
+++ b/containers/xos/Dockerfile.synchronizer-base
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-synchronizer-base
-FROM xosproject/xos-client:2.1.46
+FROM xosproject/xos-client:2.1.47
 
 COPY xos/synchronizers/new_base /opt/xos/synchronizers/new_base
 COPY xos/xos/logger.py /opt/xos/xos/logger.py
diff --git a/containers/xos/Dockerfile.xos-core b/containers/xos/Dockerfile.xos-core
index e91ea86..f6ea4e6 100644
--- a/containers/xos/Dockerfile.xos-core
+++ b/containers/xos/Dockerfile.xos-core
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-core
-FROM xosproject/xos-libraries:2.1.46
+FROM xosproject/xos-libraries:2.1.47
 
 # Install XOS
 ADD xos /opt/xos
diff --git a/lib/xos-kafka/xoskafka/xoskafkaproducer.py b/lib/xos-kafka/xoskafka/xoskafkaproducer.py
index 4611547..241d87f 100644
--- a/lib/xos-kafka/xoskafka/xoskafkaproducer.py
+++ b/lib/xos-kafka/xoskafka/xoskafkaproducer.py
@@ -78,4 +78,4 @@
         if err:
             log.error("Message failed delivery: %s" % err)
         else:
-            log.trace("Message delivered", message=msg)
+            pass
diff --git a/lib/xos-synchronizer/xossynchronizer/event_loop.py b/lib/xos-synchronizer/xossynchronizer/event_loop.py
index 6df3fab..5cbfda9 100644
--- a/lib/xos-synchronizer/xossynchronizer/event_loop.py
+++ b/lib/xos-synchronizer/xossynchronizer/event_loop.py
@@ -100,13 +100,13 @@
 
         try:
             if Config.get("dependency_graph"):
-                self.log.trace(
+                self.log.debug(
                     "Loading model dependency graph",
                     path=Config.get("dependency_graph"),
                 )
                 dep_graph_str = open(Config.get("dependency_graph")).read()
             else:
-                self.log.trace("Using default model dependency graph", graph={})
+                self.log.debug("Using default model dependency graph", graph={})
                 dep_graph_str = "{}"
 
             # joint_dependencies is of the form { Model1 -> [(Model2, src_port, dst_port), ...] }
@@ -138,7 +138,7 @@
                 True: model_dependency_graph_rev,
                 False: model_dependency_graph,
             }
-            self.log.trace("Loaded dependencies", edges=model_dependency_graph.edges())
+            self.log.debug("Loaded dependencies", edges=model_dependency_graph.edges())
         except Exception as e:
             self.log.exception("Error loading dependency graph", e=e)
             raise e
@@ -410,9 +410,9 @@
             return
 
         while True:
-            self.log.trace("Waiting for event or timeout")
+            self.log.debug("Waiting for event or timeout")
             self.wait_for_event(timeout=5)
-            self.log.trace("Synchronizer awake")
+            self.log.debug("Synchronizer awake")
 
             self.run_once()
 
@@ -449,7 +449,7 @@
                 # This needs to be dropped soon.
                 pending_steps.append(step)
 
-        self.log.trace(
+        self.log.debug(
             "Fetched pending data",
             pending_objects=pending_objects,
             legacy_steps=pending_steps,
@@ -664,7 +664,7 @@
                 )
 
                 threads = []
-                self.log.trace("In run once inner loop", deletion=deletion)
+                self.log.debug("In run once inner loop", deletion=deletion)
 
                 for cohort in dependent_cohorts:
                     thread = threading.Thread(
diff --git a/lib/xos-synchronizer/xossynchronizer/pull_step_engine.py b/lib/xos-synchronizer/xossynchronizer/pull_step_engine.py
index ece77bc..a58bfa2 100644
--- a/lib/xos-synchronizer/xossynchronizer/pull_step_engine.py
+++ b/lib/xos-synchronizer/xossynchronizer/pull_step_engine.py
@@ -40,7 +40,7 @@
             self.run_once()
 
     def run_once(self):
-        log.trace("Starting pull steps", steps=self.steps)
+        log.debug("Starting pull steps", steps=self.steps)
 
         threads = []
         for step in self.steps:
@@ -53,7 +53,7 @@
         for t in threads:
             t.join()
 
-        log.trace("Done with pull steps", steps=self.steps)
+        log.debug("Done with pull steps", steps=self.steps)
 
 
 class XOSPullStepEngine:
diff --git a/xos/synchronizers/new_base/event_loop.py b/xos/synchronizers/new_base/event_loop.py
index 9d44413..15514a5 100644
--- a/xos/synchronizers/new_base/event_loop.py
+++ b/xos/synchronizers/new_base/event_loop.py
@@ -102,13 +102,13 @@
 
         try:
             if Config.get("dependency_graph"):
-                self.log.trace(
+                self.log.debug(
                     "Loading model dependency graph",
                     path=Config.get("dependency_graph"),
                 )
                 dep_graph_str = open(Config.get("dependency_graph")).read()
             else:
-                self.log.trace("Using default model dependency graph", graph={})
+                self.log.debug("Using default model dependency graph", graph={})
                 dep_graph_str = "{}"
 
             # joint_dependencies is of the form { Model1 -> [(Model2, src_port, dst_port), ...] }
@@ -140,7 +140,7 @@
                 True: model_dependency_graph_rev,
                 False: model_dependency_graph,
             }
-            self.log.trace("Loaded dependencies", edges=model_dependency_graph.edges())
+            self.log.debug("Loaded dependencies", edges=model_dependency_graph.edges())
         except Exception as e:
             self.log.exception("Error loading dependency graph", e=e)
             raise e
@@ -477,9 +477,9 @@
             return
 
         while True:
-            self.log.trace("Waiting for event or timeout")
+            self.log.debug("Waiting for event or timeout")
             self.wait_for_event(timeout=5)
-            self.log.trace("Synchronizer awake")
+            self.log.debug("Synchronizer awake")
 
             self.run_once()
 
@@ -519,7 +519,7 @@
                 # This needs to be dropped soon.
                 pending_steps.append(step)
 
-        self.log.trace(
+        self.log.debug(
             "Fetched pending data",
             pending_objects=pending_objects,
             legacy_steps=pending_steps,
@@ -734,7 +734,7 @@
                 )
 
                 threads = []
-                self.log.trace("In run once inner loop", deletion=deletion)
+                self.log.debug("In run once inner loop", deletion=deletion)
 
                 for cohort in dependent_cohorts:
                     thread = threading.Thread(
diff --git a/xos/synchronizers/new_base/pull_step_engine.py b/xos/synchronizers/new_base/pull_step_engine.py
index 3f4732d..6d61cac 100644
--- a/xos/synchronizers/new_base/pull_step_engine.py
+++ b/xos/synchronizers/new_base/pull_step_engine.py
@@ -39,7 +39,7 @@
             self.run_once()
 
     def run_once(self):
-        log.trace("Starting pull steps", steps=self.steps)
+        log.debug("Starting pull steps", steps=self.steps)
 
         threads = []
         for step in self.steps:
@@ -52,7 +52,7 @@
         for t in threads:
             t.join()
 
-        log.trace("Done with pull steps", steps=self.steps)
+        log.debug("Done with pull steps", steps=self.steps)
 
 
 class XOSPullStepEngine:
