diff --git a/src/nix/add-to-store.cc b/src/nix/add-to-store.cc
index 139db3657b504cf17e9a186de99b347c0d2836ea..ed02227db17f5d5febf561c21598f3dfa34d9006 100644
--- a/src/nix/add-to-store.cc
+++ b/src/nix/add-to-store.cc
@@ -50,7 +50,7 @@ struct CmdAddToStore : MixDryRun, StoreCommand
         if (!dryRun)
             store->addToStore(info, sink.s);
 
-        std::cout << fmt("%s\n", store->printStorePath(info.path));
+        logger->stdout("%s", store->printStorePath(info.path));
     }
 };
 
diff --git a/src/nix/eval.cc b/src/nix/eval.cc
index 6398fc58e46d1f5017dd27a66ae600b583ac4987..86a1e8b681f34ca590ba11063c696040de75ecb3 100644
--- a/src/nix/eval.cc
+++ b/src/nix/eval.cc
@@ -55,16 +55,15 @@ struct CmdEval : MixJSON, InstallableCommand
         auto v = installable->toValue(*state).first;
         PathSet context;
 
-        stopProgressBar();
-
         if (raw) {
+            stopProgressBar();
             std::cout << state->coerceToString(noPos, *v, context);
         } else if (json) {
             JSONPlaceholder jsonOut(std::cout);
             printValueAsJSON(*state, true, *v, jsonOut, context);
         } else {
             state->forceValueDeep(*v);
-            std::cout << *v << "\n";
+            logger->stdout("%s", *v);
         }
     }
 };
diff --git a/src/nix/hash.cc b/src/nix/hash.cc
index 0cc523f507e72f5ea308bfbad249e8e42ac81c01..01628cf6cb5b0442987faca9abc68234d34cf8af 100644
--- a/src/nix/hash.cc
+++ b/src/nix/hash.cc
@@ -60,8 +60,7 @@ struct CmdHash : Command
 
             Hash h = hashSink->finish().first;
             if (truncate && h.hashSize > 20) h = compressHash(h, 20);
-            std::cout << format("%1%\n") %
-                h.to_string(base, base == SRI);
+            logger->stdout(h.to_string(base, base == SRI));
         }
     }
 };
@@ -95,7 +94,7 @@ struct CmdToBase : Command
     void run() override
     {
         for (auto s : args)
-            std::cout << fmt("%s\n", Hash(s, ht).to_string(base, base == SRI));
+            logger->stdout(Hash(s, ht).to_string(base, base == SRI));
     }
 };
 
diff --git a/src/nix/ls.cc b/src/nix/ls.cc
index 3ef1f2750b6c55368bd96d9c54bef370f5786f60..8590199d73b9c588d87522636ac7414eadabfa02 100644
--- a/src/nix/ls.cc
+++ b/src/nix/ls.cc
@@ -34,16 +34,14 @@ struct MixLs : virtual Args, MixJSON
                         (st.isExecutable ? "-r-xr-xr-x" : "-r--r--r--") :
                     st.type == FSAccessor::Type::tSymlink ? "lrwxrwxrwx" :
                     "dr-xr-xr-x";
-                std::cout <<
-                    (format("%s %20d %s") % tp % st.fileSize % relPath);
+                auto line = fmt("%s %20d %s", tp, st.fileSize, relPath);
                 if (st.type == FSAccessor::Type::tSymlink)
-                    std::cout << " -> " << accessor->readLink(curPath)
-                    ;
-                std::cout << "\n";
+                    line += " -> " + accessor->readLink(curPath);
+                logger->stdout(line);
                 if (recursive && st.type == FSAccessor::Type::tDirectory)
                     doPath(st, curPath, relPath, false);
             } else {
-                std::cout << relPath << "\n";
+                logger->stdout(relPath);
                 if (recursive) {
                     auto st = accessor->stat(curPath);
                     if (st.type == FSAccessor::Type::tDirectory)
diff --git a/src/nix/show-config.cc b/src/nix/show-config.cc
index 87544f93771dd1cb226a1430f620e40bd83ac72a..6104b10bcd12408e4037e40d9a4a8aba157a8c24 100644
--- a/src/nix/show-config.cc
+++ b/src/nix/show-config.cc
@@ -23,7 +23,7 @@ struct CmdShowConfig : Command, MixJSON
             std::map<std::string, Config::SettingInfo> settings;
             globalConfig.getSettings(settings);
             for (auto & s : settings)
-                std::cout << s.first + " = " + s.second.value + "\n";
+                logger->stdout("%s = %s", s.first, s.second.value);
         }
     }
 };
diff --git a/src/nix/why-depends.cc b/src/nix/why-depends.cc
index d3b7a674a327b17fde1990b31ff2a6381b56d5c0..f9acc7f13eae40e03b712cf58893e31673a7baef 100644
--- a/src/nix/why-depends.cc
+++ b/src/nix/why-depends.cc
@@ -149,7 +149,7 @@ struct CmdWhyDepends : SourceExprCommand
             auto pathS = store->printStorePath(node.path);
 
             assert(node.dist != inf);
-            std::cout << fmt("%s%s%s%s" ANSI_NORMAL "\n",
+            logger->stdout("%s%s%s%s" ANSI_NORMAL,
                 firstPad,
                 node.visited ? "\e[38;5;244m" : "",
                 firstPad != "" ? "→ " : "",