diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
index 285608d..b0a9987 100644
--- a/doc/src/sgml/ref/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -351,11 +351,11 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
      </varlistentry>
 
      <varlistentry>
-      <term><option>-l</option></term>
-      <term><option>--log</option></term>
+      <term><option>-l</> <replaceable>filename</></term>
+      <term><option>--log</> <replaceable>filename</></term>
       <listitem>
        <para>
-        Write the time taken by each transaction to a log file.
+        Write the time taken by each transaction to <replaceable>filename</>.
         See below for details.
        </para>
       </listitem>
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index d44cfda..9f3ae53 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -180,6 +180,7 @@ char	   *pghost = "";
 char	   *pgport = "";
 char	   *login = NULL;
 char	   *dbName;
+char	   *logfile;
 const char *progname;
 
 #define WSEP '@'				/* weight separator */
@@ -496,7 +497,7 @@ usage(void)
 		   "  -D, --define=VARNAME=VALUE\n"
 	  "                           define variable for use by custom script\n"
 		   "  -j, --jobs=NUM           number of threads (default: 1)\n"
-		   "  -l, --log                write transaction times to log file\n"
+		   "  -l, --log=FILENAME       write transaction times to log file\n"
 		   "  -L, --latency-limit=NUM  count transactions lasting more than NUM ms as late\n"
 		   "  -M, --protocol=simple|extended|prepared\n"
 		   "                           protocol for submitting queries (default: simple)\n"
@@ -3709,7 +3710,7 @@ main(int argc, char **argv)
 	state = (CState *) pg_malloc(sizeof(CState));
 	memset(state, 0, sizeof(CState));
 
-	while ((c = getopt_long(argc, argv, "ih:nvp:dqb:SNc:j:Crs:t:T:U:lf:D:F:M:P:R:L:", long_options, &optindex)) != -1)
+	while ((c = getopt_long(argc, argv, "ih:nvp:dqb:SNc:j:Crs:t:T:U:l:f:D:F:M:P:R:L:", long_options, &optindex)) != -1)
 	{
 		char	   *script;
 
@@ -3830,6 +3831,7 @@ main(int argc, char **argv)
 				break;
 			case 'l':
 				benchmarking_option_set = true;
+				logfilename = pg_strdup(optarg);
 				use_log = true;
 				break;
 			case 'q':
@@ -4390,9 +4392,10 @@ threadRun(void *arg)
 		char		logpath[64];
 
 		if (thread->tid == 0)
-			snprintf(logpath, sizeof(logpath), "pgbench_log.%d", main_pid);
+			snprintf(logpath, sizeof(logpath), "%s.%d", logfile, main_pid);
 		else
-			snprintf(logpath, sizeof(logpath), "pgbench_log.%d.%d", main_pid, thread->tid);
+			snprintf(logpath, sizeof(logpath), "%s.%d.%d", logfile, main_pid, thread->tid);
+
 		thread->logfile = fopen(logpath, "w");
 
 		if (thread->logfile == NULL)
