diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c
index c88eaae4fba93d5781b4496843a0f7bc4f51bd3f..b5711524acc37a95da07f7cc27e56c4c80805961 100644
--- a/src/lib-sieve/sieve-result.c
+++ b/src/lib-sieve/sieve-result.c
@@ -1743,8 +1743,11 @@ void sieve_result_log(const struct sieve_action_exec_env *aenv,
 		      const char *csrc_filename, unsigned int csrc_linenum,
 		      const char *fmt, ...)
 {
+	const struct sieve_execute_env *eenv = aenv->exec_env;
 	struct sieve_error_params params = {
-		.log_type = LOG_TYPE_INFO,
+		.log_type = (HAS_ALL_BITS(eenv->flags,
+					  SIEVE_EXECUTE_FLAG_LOG_RESULT) ?
+			     LOG_TYPE_INFO : LOG_TYPE_DEBUG),
 		.event = aenv->event,
 		.csrc = {
 			.filename = csrc_filename,
@@ -1765,7 +1768,9 @@ void sieve_result_global_log(const struct sieve_action_exec_env *aenv,
 {
 	const struct sieve_execute_env *eenv = aenv->exec_env;
 	struct sieve_error_params params = {
-		.log_type = LOG_TYPE_INFO,
+		.log_type = (HAS_ALL_BITS(eenv->flags,
+					  SIEVE_EXECUTE_FLAG_LOG_RESULT) ?
+			     LOG_TYPE_INFO : LOG_TYPE_DEBUG),
 		.event = aenv->event,
 		.csrc = {
 			.filename = csrc_filename,
@@ -1833,7 +1838,9 @@ void sieve_result_event_log(const struct sieve_action_exec_env *aenv,
 {
 	const struct sieve_execute_env *eenv = aenv->exec_env;
 	struct sieve_error_params params = {
-		.log_type = LOG_TYPE_INFO,
+		.log_type = (HAS_ALL_BITS(eenv->flags,
+					  SIEVE_EXECUTE_FLAG_LOG_RESULT) ?
+			     LOG_TYPE_INFO : LOG_TYPE_DEBUG),
 		.event = event,
 		.csrc = {
 			.filename = csrc_filename,
diff --git a/src/lib-sieve/sieve-types.h b/src/lib-sieve/sieve-types.h
index b4d9d840a5690d285ccc06a839fe9cbd27b2aa41..df8928c9a4b1fecba3e787f88979a417853e30a6 100644
--- a/src/lib-sieve/sieve-types.h
+++ b/src/lib-sieve/sieve-types.h
@@ -160,6 +160,8 @@ enum sieve_execute_flags {
 	SIEVE_EXECUTE_FLAG_NO_ENVELOPE = (1<<2),
 	/* Skip sending responses */
 	SIEVE_EXECUTE_FLAG_SKIP_RESPONSES = (1<<3),
+	/* Log result as info (when absent, only debug logging is performed) */
+	SIEVE_EXECUTE_FLAG_LOG_RESULT = (1<<4),
 };
 
 /*
diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index 5d04815211b61f6dbab2a0a5087b05632ed23ff5..1435b1be5fee5c76ccc9e4bd4ceb4cf15e0b77fd 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -487,7 +487,7 @@ lda_sieve_execute_script(struct lda_sieve_run_context *srctx,
 	struct sieve_error_handler *exec_ehandler;
 	struct sieve_binary *sbin = NULL;
 	enum sieve_compile_flags cpflags = 0;
-	enum sieve_execute_flags exflags = 0;
+	enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT;
 	bool user_script, more;
 
 	*error_r = SIEVE_ERROR_NONE;
@@ -580,6 +580,7 @@ static int lda_sieve_execute_scripts(struct lda_sieve_run_context *srctx)
 	struct sieve_multiscript *mscript;
 	struct sieve_error_handler *exec_ehandler;
 	struct sieve_script *script, *last_script = NULL;
+	enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT;
 	bool discard_script;
 	enum sieve_error error;
 	unsigned int i;
@@ -645,9 +646,10 @@ static int lda_sieve_execute_scripts(struct lda_sieve_run_context *srctx)
 	exec_ehandler = (srctx->user_ehandler != NULL ?
 			 srctx->user_ehandler : srctx->master_ehandler);
 	if (error == SIEVE_ERROR_TEMP_FAILURE) {
-		ret = sieve_multiscript_tempfail(&mscript, exec_ehandler, 0);
+		ret = sieve_multiscript_tempfail(&mscript, exec_ehandler,
+						 exflags);
 	} else {
-		ret = sieve_multiscript_finish(&mscript, exec_ehandler, 0,
+		ret = sieve_multiscript_finish(&mscript, exec_ehandler, exflags,
 					       NULL);
 	}
 
diff --git a/src/sieve-tools/sieve-filter.c b/src/sieve-tools/sieve-filter.c
index cf7eb5438529a8f9ca1cada75d6fcee55a719710..6ef92100f5c57677aaf95437ade3e800c8f56f29 100644
--- a/src/sieve-tools/sieve-filter.c
+++ b/src/sieve-tools/sieve-filter.c
@@ -89,6 +89,7 @@ result_amend_log_message(const struct sieve_script_env *senv,
 static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail)
 {
 	struct sieve_error_handler *ehandler = sfctx->data->ehandler;
+	enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT;
 	struct sieve_script_env *senv = sfctx->data->senv;
 	struct sieve_exec_status estatus;
 	struct sieve_binary *sbin;
@@ -137,7 +138,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail)
 			   date, size, str_sanitize(subject, 40));
 
 		ret = sieve_execute(sbin, &msgdata, senv, ehandler, ehandler,
-				    0, NULL);
+				    exflags, NULL);
 	} else {
 		o_stream_nsend_str(
 			sfctx->teststream,
@@ -151,7 +152,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail)
 					str_sanitize(subject, 40)));
 
 		ret = sieve_test(sbin, &msgdata, senv, ehandler,
-				 sfctx->teststream, 0, NULL);
+				 sfctx->teststream, exflags, NULL);
 	}
 
 	/* Handle message in source folder */
diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c
index 5f04a23dfc88ab4b2db7be72a51045901a4342c1..92793920be95da74e5773769be6c756a8fa819cf 100644
--- a/src/sieve-tools/sieve-test.c
+++ b/src/sieve-tools/sieve-test.c
@@ -162,6 +162,7 @@ int main(int argc, char **argv)
 	struct sieve_message_data msgdata;
 	struct sieve_script_env scriptenv;
 	struct sieve_exec_status estatus;
+	enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT;
 	struct sieve_error_handler *ehandler;
 	struct ostream *teststream = NULL;
 	struct sieve_trace_log *trace_log = NULL;
@@ -361,11 +362,12 @@ int main(int argc, char **argv)
 			/* Execute/Test script */
 			if (execute) {
 				ret = sieve_execute(sbin, &msgdata, &scriptenv,
-						    ehandler, ehandler, 0,
+						    ehandler, ehandler, exflags,
 						    NULL);
 			} else {
 				ret = sieve_test(sbin, &msgdata, &scriptenv,
-						 ehandler, teststream, 0, NULL);
+						 ehandler, teststream, exflags,
+						 NULL);
 			}
 		} else {
 			/* Multiple scripts */
@@ -414,7 +416,8 @@ int main(int argc, char **argv)
 
 				/* Execute/Test script */
 				more = sieve_multiscript_run(
-					mscript, sbin, ehandler, ehandler, 0);
+					mscript, sbin, ehandler, ehandler,
+					exflags);
 			}
 
 			/* Execute/Test main script */
@@ -434,11 +437,12 @@ int main(int argc, char **argv)
 				main_sbin = NULL;
 
 				(void)sieve_multiscript_run(
-					mscript, sbin, ehandler, ehandler, 0);
+					mscript, sbin, ehandler, ehandler,
+					exflags);
 			}
 
 			result = sieve_multiscript_finish(
-				&mscript, ehandler, 0, NULL);
+				&mscript, ehandler, exflags, NULL);
 
 			ret = (ret > 0 ? result : ret);
 		}