diff --git a/src/common/log.c b/src/common/log.c
index b43f956716ccccdbfde9ab04ddeb3484a28d4dac..89271a45abf28bb367af6feead3bc4304aabfc0b 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -321,14 +321,20 @@ static void log_msg(log_level_t level, const char *fmt, va_list args)
 
 	if (level <= STDERR_LEVEL) {
 		fflush(stdout);
-		fprintf(stderr, "%s: %s%s\n", log->argv0, pfx, buf);
+		if (buf[strlen(buf) - 1] == '\n')
+			fprintf(stderr, "%s: %s%s", log->argv0, pfx, buf);
+		else
+			fprintf(stderr, "%s: %s%s\n", log->argv0, pfx, buf);
 		fflush(stderr);
 	}
 
 	if (level <= LOGFILE_LEVEL && log->logfp != NULL) {
 		xstrfmtcat(&msgbuf, "[%T] %s%s", pfx, buf);
 
-		fprintf(log->logfp, "%s\n", msgbuf);
+		if (buf[strlen(buf) - 1] == '\n')
+			fprintf(log->logfp, "%s", msgbuf);
+		else
+			fprintf(log->logfp, "%s\n", msgbuf);
 		fflush(log->logfp);
 
 		xfree(msgbuf);