diff --git a/trsync/cmd/cli.py b/trsync/cmd/cli.py
index ce5abb3..c2437d1 100644
--- a/trsync/cmd/cli.py
+++ b/trsync/cmd/cli.py
@@ -103,7 +103,7 @@
             None if properties['snapshot_lifetime'] == 'None' \
             else int(properties['snapshot_lifetime'])
 
-        failed = list()
+        failed = dict()
         for server in servers:
             source = rsync_ops.RsyncOps(source_url)
             source_url = source.url.url_dir()
@@ -111,13 +111,12 @@
             try:
                 remote.push(source_url, mirror_name, symlinks=symlinks)
             except Exception as e:
-                print(e.message)
-                failed.append(server)
+                failed[server] = e.message
 
         if failed:
-            print("Failed to push to {}".format(str(failed)))
+            for srv, msg in failed.items():
+                self.log.error("Failed to push to {}".format(srv))
             sys.exit(1)
-            # self.app.stdout.write(parsed_args.arg + "\n")
 
 
 class RemoveCmd(command.Command):
@@ -154,18 +153,18 @@
         properties['init_directory_structure'] = False
         properties['rsync_extra_params'] = properties.pop('extra')
 
-        failed = list()
+        failed = dict()
         for server in servers:
             remote = rsync_mirror.TRsync(server, **properties)
             try:
-                print("Removing items {}".format(str(path)))
+                self.log.info("Removing items {}".format(str(path)))
                 remote.rm_all(path)
             except Exception as e:
-                print(e.message)
-                failed.append(server)
+                failed[server] = e.message
 
         if failed:
-            print("Failed to remove {}".format(str(failed)))
+            for srv, msg in failed.items():
+                self.log.error("Failed to remove at {}".format(srv))
             sys.exit(1)
 
 
