diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index e1ffd22c5a8494b4ba34450114e69aaf4cd71a7a..216e8f7e9a16194fac97f1d189c887937d2134ad 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.322 2005/06/04 20:42:41 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.323 2005/06/09 22:29:52 momjian Exp $
 -->
 
 <chapter Id="runtime">
@@ -2829,6 +2829,11 @@ archive_command = 'copy "%p" /mnt/server/archivedir/"%f"'  # Windows
              <entry>Remote host name or IP address, and remote port</entry>
              <entry>yes</entry>
             </row>
+            <row>
+             <entry><literal>%h</literal></entry>
+             <entry>Remote Hostname or IP address</entry>
+             <entry>yes</entry>
+            </row>
             <row>
              <entry><literal>%p</literal></entry>
              <entry>Process ID</entry>
@@ -2839,6 +2844,11 @@ archive_command = 'copy "%p" /mnt/server/archivedir/"%f"'  # Windows
              <entry>Time stamp</entry>
              <entry>no</entry>
             </row>
+            <row>
+             <entry><literal>%m</literal></entry>
+             <entry>Timestamp with milliseconds</entry>
+             <entry>no</entry>
+            </row>
             <row>
              <entry><literal>%i</literal></entry>
              <entry>Command tag: This is the command that generated the log line.</entry>
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 5dd564ef28167147dbb7fd454b38265f4bd3769a..122a0a92a55df74d5ea12d4c7a60ce24e4496991 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -42,7 +42,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.158 2005/03/12 01:54:44 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.159 2005/06/09 22:29:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1375,6 +1375,33 @@ log_line_prefix(StringInfo buf)
 			case 'l':
 				appendStringInfo(buf, "%ld", log_line_number);
 				break;
+			case 'm':
+				{
+					time_t stamp_time;
+					char strfbuf[128], msbuf[5];
+					struct timeval tv;
+
+					gettimeofday(&tv, NULL);
+ 					stamp_time = tv.tv_sec;
+
+					strftime(strfbuf, sizeof(strfbuf),
+					/* leave room for milliseconds... */
+					/* Win32 timezone names are too long so don't print them. */
+#ifndef WIN32
+						"%Y-%m-%d %H:%M:%S     %Z",
+#else
+						"%Y-%m-%d %H:%M:%S     ",
+#endif
+						localtime(&stamp_time));
+
+					/* 'paste' milliseconds into place... */
+ 					sprintf(msbuf, ".%03d", 
+						(int)(tv.tv_usec/1000));
+					strncpy(strfbuf+19, msbuf, 4);
+
+					appendStringInfoString(buf, strfbuf);
+				}
+				break;
 			case 't':
 				{
 					/*
@@ -1426,6 +1453,10 @@ log_line_prefix(StringInfo buf)
 										 MyProcPort->remote_port);
 				}
 				break;
+			case 'h':
+				if (MyProcPort)
+					appendStringInfo(buf, "%s", MyProcPort->remote_host);
+				break;
 			case 'q':
 				/* in postmaster and friends, stop if %q is seen */
 				/* in a backend, just ignore */
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index d54ae5fcfda19ffc4616e912d53ef99ad982448e..e68f82bb3c8cae6bdd7199b4bdbc726a4ea10b7f 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -241,8 +241,9 @@
 #log_duration = false
 #log_line_prefix = ''		# e.g. '<%u%%%d> ' 
 				# %u=user name %d=database name
-				# %r=remote host and port
+				# %r=remote host and port %h=remote host
 				# %p=PID %t=timestamp %i=command tag
+				# %m=timestamp with milliseconds
 				# %c=session id %l=session line number
 				# %s=session start timestamp %x=transaction id
 				# %q=stop here in non-session processes