diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
index 26d2418..67ef40a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
@@ -74,4 +74,4 @@
   private boolean isAllProjects(ProjectResource rsrc) {
     return (rsrc.getControl().getProject().getNameKey().equals(allProjectsName));
   }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
index 85680d9..fe02aeb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
@@ -169,4 +169,4 @@
       deleteLog.onDelete((IdentifiedUser) userProvider.get(), project.getNameKey(), input, ex);
     }
   }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
index e6315b3..5eecef6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
@@ -159,7 +159,7 @@
       try {
         indexer.delete(id);
       } catch (IOException e) {
-        log.error(String.format("Failed to delete change %s from index", id), e);
+        log.error("Failed to delete change {} from index", id, e);
       }
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
index 9aae37e..14214c4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
@@ -114,19 +114,19 @@
   @Override
   public void start() {
     new Thread(
-        () -> {
-          for (Path folder : repoFolders) {
-            if (!folder.toFile().exists()) {
-              log.debug("Base path {} does not exist", folder);
-              continue;
-            }
-            try {
-              Files.walkFileTree(folder, new TrashFolderRemover());
-            } catch (IOException e) {
-              log.warn("Exception while trying to delete trash folders", e);
-            }
-          }
-        },
+            () -> {
+              for (Path folder : repoFolders) {
+                if (!folder.toFile().exists()) {
+                  log.debug("Base path {} does not exist", folder);
+                  continue;
+                }
+                try {
+                  Files.walkFileTree(folder, new TrashFolderRemover());
+                } catch (IOException e) {
+                  log.warn("Exception while trying to delete trash folders", e);
+                }
+              }
+            },
             "DeleteTrashFolders")
         .start();
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
index 8aac2c1..c36ce1a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
@@ -104,7 +104,7 @@
     } catch (IOException e) {
       // Only log if delete failed - repo already moved to trash.
       // Otherwise, listeners are never called.
-      log.warn("Error trying to delete " + trash, e);
+      log.warn("Error trying to delete {}", trash, e);
     }
 
     // Delete parent folders if they are (now) empty
@@ -112,7 +112,7 @@
       try {
         recursiveDeleteParent(repoFile.getParentFile(), basePath.toFile());
       } catch (IOException e) {
-        log.warn("Couldn't delete (empty) parents of " + repoFile, e);
+        log.warn("Couldn't delete (empty) parents of {}", repoFile, e);
       }
     }
 
