diff --git a/main/manager.c b/main/manager.c
index b5388c24b08f31905134cc789536d6622ce82aa3..69cbe3746750fb5083f3159034e8f3129f27bf10 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -6439,6 +6439,32 @@ static int manager_moduleload(struct mansession *s, const struct message *m)
 	return 0;
 }
 
+static void log_action(const struct message *m, const char *action)
+{
+	struct ast_str *buf;
+	int x;
+
+	if (!manager_debug) {
+		return;
+	}
+
+	buf = ast_str_create(256);
+	if (!buf) {
+		return;
+	}
+
+	for (x = 0; x < m->hdrcount; ++x) {
+		if (!strncasecmp(m->headers[x], "Secret", 6)) {
+			ast_str_append(&buf, 0, "Secret: <redacted from logging>\n");
+		} else {
+			ast_str_append(&buf, 0, "%s\n", m->headers[x]);
+		}
+	}
+
+	ast_verbose("<--- Examining AMI action: -->\n%s\n", ast_str_buffer(buf));
+	ast_free(buf);
+}
+
 /*
  * Done with the action handlers here, we start with the code in charge
  * of accepting connections and serving them.
@@ -6469,6 +6495,8 @@ static int process_message(struct mansession *s, const struct message *m)
 		return 0;
 	}
 
+	log_action(m, action);
+
 	if (ast_shutting_down()) {
 		ast_log(LOG_ERROR, "Unable to process manager action '%s'. Asterisk is shutting down.\n", action);
 		mansession_lock(s);