From f828654e1097bdbb40fedebd9ac1ea045b183e15 Mon Sep 17 00:00:00 2001
From: Jeff Davis <jdavis@postgresql.org>
Date: Mon, 7 Sep 2015 13:46:31 -0700
Subject: [PATCH] Add log_line_prefix option 'n' for Unix epoch.

Prints time as Unix epoch with milliseconds.

Tomas Vondra, reviewed by Fabien Coelho.
---
 doc/src/sgml/config.sgml                      |  5 +++++
 src/backend/utils/error/elog.c                | 14 ++++++++++++++
 src/backend/utils/misc/postgresql.conf.sample |  1 +
 3 files changed, 20 insertions(+)

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index e3dc23bf130..3ced3997309 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -4629,6 +4629,11 @@ local0.*    /var/log/postgresql
              <entry>Time stamp with milliseconds</entry>
              <entry>no</entry>
             </row>
+            <row>
+             <entry><literal>%n</literal></entry>
+             <entry>Time stamp with milliseconds (as a Unix epoch)</entry>
+             <entry>no</entry>
+            </row>
             <row>
              <entry><literal>%i</literal></entry>
              <entry>Command tag: type of session's current command</entry>
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 088c714821b..9114c55b66b 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -2438,6 +2438,20 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
 						appendStringInfoString(buf, strfbuf);
 				}
 				break;
+			case 'n':
+				{
+					struct	timeval tv;
+					char	strfbuf[128];
+
+					gettimeofday(&tv, NULL);
+					sprintf(strfbuf, "%ld.%03d", tv.tv_sec, (int)(tv.tv_usec / 1000));
+
+					if (padding != 0)
+						appendStringInfo(buf, "%*s", padding, strfbuf);
+					else
+						appendStringInfoString(buf, strfbuf);
+				}
+				break;
 			case 's':
 				if (formatted_start_time[0] == '\0')
 					setup_formatted_start_time();
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 695a88fe7d1..c33e5856197 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -425,6 +425,7 @@
 					#   %p = process ID
 					#   %t = timestamp without milliseconds
 					#   %m = timestamp with milliseconds
+					#   %n = timestamp with milliseconds (as a Unix epoch)
 					#   %i = command tag
 					#   %e = SQL state
 					#   %c = session ID
-- 
GitLab