diff --git a/pw_multisink/util.cc b/pw_multisink/util.cc
index 825701d..e8b4819 100644
--- a/pw_multisink/util.cc
+++ b/pw_multisink/util.cc
@@ -25,8 +25,10 @@
                                pw::log::LogEntries::StreamEncoder& encoder,
                                size_t max_num_entries) {
   auto callback = [&encoder](ConstByteSpan entry) {
-    encoder.WriteBytes(
-        static_cast<uint32_t>(pw::log::LogEntries::Fields::ENTRIES), entry);
+    encoder
+        .WriteBytes(static_cast<uint32_t>(pw::log::LogEntries::Fields::ENTRIES),
+                    entry)
+        .IgnoreError();
   };
   return sink.UnsafeForEachEntry(callback, max_num_entries);
 }
diff --git a/pw_thread/snapshot.cc b/pw_thread/snapshot.cc
index cfc36ce..4754420 100644
--- a/pw_thread/snapshot.cc
+++ b/pw_thread/snapshot.cc
@@ -33,9 +33,9 @@
                      Thread::StreamEncoder& encoder,
                      const ProcessThreadStackCallback& thread_stack_callback) {
   // TODO(b/234890430): Add support for ascending stacks.
-  encoder.WriteStackStartPointer(stack.stack_high_addr);
-  encoder.WriteStackEndPointer(stack.stack_low_addr);
-  encoder.WriteStackPointer(stack.stack_pointer);
+  encoder.WriteStackStartPointer(stack.stack_high_addr).IgnoreError();
+  encoder.WriteStackEndPointer(stack.stack_low_addr).IgnoreError();
+  encoder.WriteStackPointer(stack.stack_pointer).IgnoreError();
   // The PRIuPTR is an appropriate format specifier for uintptr_t values
   // https://stackoverflow.com/a/5796039/1224002
   PW_LOG_DEBUG("Active stack: 0x%08" PRIuPTR "x-0x%08" PRIuPTR "x (%ld bytes)",
@@ -46,7 +46,7 @@
   if (stack.stack_pointer_est_peak.has_value()) {
     const uintptr_t stack_pointer_est_peak =
         stack.stack_pointer_est_peak.value();
-    encoder.WriteStackPointerEstPeak(stack_pointer_est_peak);
+    encoder.WriteStackPointerEstPeak(stack_pointer_est_peak).IgnoreError();
     PW_LOG_DEBUG("Est peak stack: 0x%08" PRIuPTR "x-0x%08" PRIuPTR
                  "x (%ld bytes)",
                  stack.stack_high_addr,
diff --git a/pw_thread/thread_snapshot_service.cc b/pw_thread/thread_snapshot_service.cc
index df87eac..02114d0 100644
--- a/pw_thread/thread_snapshot_service.cc
+++ b/pw_thread/thread_snapshot_service.cc
@@ -107,8 +107,8 @@
 
   ConstByteSpan name_request;
   if (!request.empty()) {
-    Status status = DecodeThreadName(request, name_request);
-    if (!status.ok()) {
+    if (const auto status = DecodeThreadName(request, name_request);
+        !status.ok()) {
       PW_LOG_ERROR("Service unable to decode thread name with error code %d",
                    status.code());
     }
@@ -142,7 +142,10 @@
     }
     return iteration_info.status.ok();
   };
-  ForEachThread(cb);
+  if (const auto status = ForEachThread(cb); !status.ok()) {
+    PW_LOG_ERROR("Failed to capture thread information, error %d",
+                 status.code());
+  }
 
   // This logging action is external to thread iteration because it is
   // unsafe to log within ForEachThread() when the scheduler is disabled.
diff --git a/pw_thread_freertos/snapshot.cc b/pw_thread_freertos/snapshot.cc
index 631eca9..8d19f7f 100644
--- a/pw_thread_freertos/snapshot.cc
+++ b/pw_thread_freertos/snapshot.cc
@@ -48,33 +48,33 @@
   switch (thread_state) {
     case eRunning:
       PW_LOG_DEBUG("Thread state: RUNNING");
-      encoder.WriteState(ThreadState::Enum::RUNNING);
+      encoder.WriteState(ThreadState::Enum::RUNNING).IgnoreError();
       return;
 
     case eReady:
       PW_LOG_DEBUG("Thread state: READY");
-      encoder.WriteState(ThreadState::Enum::READY);
+      encoder.WriteState(ThreadState::Enum::READY).IgnoreError();
       return;
 
     case eBlocked:
       PW_LOG_DEBUG("Thread state: BLOCKED");
-      encoder.WriteState(ThreadState::Enum::BLOCKED);
+      encoder.WriteState(ThreadState::Enum::BLOCKED).IgnoreError();
       return;
 
     case eSuspended:
       PW_LOG_DEBUG("Thread state: SUSPENDED");
-      encoder.WriteState(ThreadState::Enum::SUSPENDED);
+      encoder.WriteState(ThreadState::Enum::SUSPENDED).IgnoreError();
       return;
 
     case eDeleted:
       PW_LOG_DEBUG("Thread state: INACTIVE");
-      encoder.WriteState(ThreadState::Enum::INACTIVE);
+      encoder.WriteState(ThreadState::Enum::INACTIVE).IgnoreError();
       return;
 
     case eInvalid:
     default:
       PW_LOG_DEBUG("Thread state: UNKNOWN");
-      encoder.WriteState(ThreadState::Enum::UNKNOWN);
+      encoder.WriteState(ThreadState::Enum::UNKNOWN).IgnoreError();
       return;
   }
 }
@@ -123,7 +123,7 @@
   const tskTCB& tcb = *reinterpret_cast<tskTCB*>(thread);
 
   PW_LOG_DEBUG("Capturing thread info for %s", tcb.pcTaskName);
-  encoder.WriteName(as_bytes(span(std::string_view(tcb.pcTaskName))));
+  PW_TRY(encoder.WriteName(as_bytes(span(std::string_view(tcb.pcTaskName)))));
 
   CaptureThreadState(thread_state, encoder);
 
