diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index c633e11..5da8b57 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -100,6 +100,7 @@ bool		wal_compression = false;
 char	   *wal_consistency_checking_string = NULL;
 bool	   *wal_consistency_checking = NULL;
 bool		log_checkpoints = false;
+bool		log_recovery_points = false;
 int			sync_method = DEFAULT_SYNC_METHOD;
 int			wal_level = WAL_LEVEL_MINIMAL;
 int			CommitDelay = 0;	/* precommit delay in microseconds */
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index bdfb66f..e6cf576 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -86,6 +86,8 @@ static void ProcessUtilitySlow(ParseState *pstate,
 				   char *completionTag);
 static void ExecDropStmt(DropStmt *stmt, bool isTopLevel);
 
+bool		Log_recovery_points = false;
+
 
 /*
  * CommandIsReadOnly: is an executable query read-only?
@@ -538,6 +540,9 @@ standard_ProcessUtility(PlannedStmt *pstmt,
 			break;
 
 		case T_TruncateStmt:
+			if (log_recovery_points)
+				ereport(LOG,
+					(errmsg("recovery_point_lsn: 0/%X", (int) ProcLastRecPtr)));
 			ExecuteTruncate((TruncateStmt *) parsetree);
 			break;
 
@@ -1718,6 +1723,9 @@ ExecDropStmt(DropStmt *stmt, bool isTopLevel)
 			/* fall through */
 
 		case OBJECT_TABLE:
+			if (log_recovery_points)
+				ereport(LOG,
+					(errmsg("recovery_point_lsn: 0/%X", (int) ProcLastRecPtr)));
 		case OBJECT_SEQUENCE:
 		case OBJECT_VIEW:
 		case OBJECT_MATVIEW:
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 7cd2d2d..fa48393 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -1113,6 +1113,15 @@ static struct config_bool ConfigureNamesBool[] =
 		NULL, NULL, NULL
 	},
 	{
+		{"log_recovery_points", PGC_SIGHUP, LOGGING_WHAT,
+			gettext_noop("Logs each LSN."),
+			NULL
+		},
+		&log_recovery_points,
+		false,
+		NULL, NULL, NULL
+	},
+	{
 		{"log_connections", PGC_SU_BACKEND, LOGGING_WHAT,
 			gettext_noop("Logs each successful connection."),
 			NULL
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 3d88e80..c3f25c3 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -455,6 +455,7 @@
 #debug_print_plan = off
 #debug_pretty_print = on
 #log_checkpoints = off
+#log_recovery_points = off
 #log_connections = off
 #log_disconnections = off
 #log_duration = off
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index 421ba6d..5420e84 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -109,6 +109,7 @@ extern bool wal_compression;
 extern bool *wal_consistency_checking;
 extern char *wal_consistency_checking_string;
 extern bool log_checkpoints;
+extern bool log_recovery_points;
 
 extern int	CheckPointSegments;
 
diff --git a/src/test/regress/regression.diffs b/src/test/regress/regression.diffs
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/regress/regression.out b/src/test/regress/regression.out
new file mode 100644
index 0000000..e69de29
