diff --git a/src/helper/log.c b/src/helper/log.c
index 549d71279d9a8f38b226f39ff796920f545a21dc..8dbdc9471bdff3a5cc764f433aa04c25dad4aff3 100644
--- a/src/helper/log.c
+++ b/src/helper/log.c
@@ -194,17 +194,18 @@ void log_printf_lf(enum log_levels level, const char *file, int line, const char
  */
 int handle_debug_level_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
-	if (argc == 0)
-		command_print(cmd_ctx, "debug_level: %i", debug_level);
-
-	if (argc > 0)
-		debug_level = strtoul(args[0], NULL, 0);
-
-	if (debug_level < 0)
-		debug_level = 0;
+	if (argc == 1)
+	{
+		unsigned new_level;
+		int retval = parse_uint(args[0], &new_level);
+		if (ERROR_OK != retval)
+			return retval;
+		debug_level = MIN(new_level, LOG_LVL_DEBUG);
+	}
+	else if (argc > 1)
+		return ERROR_COMMAND_SYNTAX_ERROR;
 
-	if (debug_level > 3)
-		debug_level = 3;
+	command_print(cmd_ctx, "debug_level: %i", debug_level);
 
 	if (debug_level >= LOG_LVL_DEBUG && server_use_pipes == 1)
 	{