Instead of hard-wiring specific verbosity levels into the option
processing of client applications, invent pg_logging_increase_verbosity()
and encourage clients to implement --verbose by calling that. Then,
the common convention that more -v's gets you more verbosity just works.
In particular, this allows resurrection of the debug-grade messages that
have long existed in pg_dump and its siblings. They were unreachable
before this commit due to lack of a way to select PG_LOG_DEBUG logging
level. (It appears that they may have been unreachable for some time
before common/logging.c was introduced, too, so I'm not specifically
blaming
cc8d41511 for the oversight. One reason for thinking that is
that it's now apparent that _allocAH()'s message needs a null-pointer
guard. Testing might have failed to reveal that before
96bf88d52.)
Discussion: https://postgr.es/m/
1173106.
1600116625@sss.pgh.pa.us
<application>pg_dump</application> to output detailed object
comments and start/stop times to the dump file, and progress
messages to standard error.
+ Repeating the option causes additional debug-level messages
+ to appear on standard error.
</para>
</listitem>
</varlistentry>
Specifies verbose mode. This will cause
<application>pg_dumpall</application> to output start/stop
times to the dump file, and progress messages to standard error.
- It will also enable verbose output in <application>pg_dump</application>.
+ Repeating the option causes additional debug-level messages
+ to appear on standard error.
+ The option is also passed down to <application>pg_dump</application>.
</para>
</listitem>
</varlistentry>
<term><option>--verbose</option></term>
<listitem>
<para>
- Specifies verbose mode.
+ Specifies verbose mode. This will cause
+ <application>pg_restore</application> to output detailed object
+ comments and start/stop times to the output file, and progress
+ messages to standard error.
+ Repeating the option causes additional debug-level messages
+ to appear on standard error.
</para>
</listitem>
</varlistentry>
switch (c)
{
case 'd': /* Debug mode */
- pg_logging_set_level(PG_LOG_DEBUG);
+ pg_logging_increase_verbosity();
break;
case 'n': /* Dry-Run mode */
dryrun = true;
{
ArchiveHandle *AH;
- pg_log_debug("allocating AH for %s, format %d", FileSpec, fmt);
+ pg_log_debug("allocating AH for %s, format %d",
+ FileSpec ? FileSpec : "(stdio)", fmt);
AH = (ArchiveHandle *) pg_malloc0(sizeof(ArchiveHandle));
case 'v': /* verbose */
g_verbose = true;
- pg_logging_set_level(PG_LOG_INFO);
+ pg_logging_increase_verbosity();
break;
case 'w':
case 'v':
verbose = true;
- pg_logging_set_level(PG_LOG_INFO);
+ pg_logging_increase_verbosity();
appendPQExpBufferStr(pgdumpopts, " -v");
break;
case 'v': /* verbose */
opts->verbose = 1;
- pg_logging_set_level(PG_LOG_INFO);
+ pg_logging_increase_verbosity();
break;
case 'w':
case 3:
debug = true;
- pg_logging_set_level(PG_LOG_DEBUG);
+ pg_logging_increase_verbosity();
break;
case 'D': /* -D or --target-pgdata */
pgport = pg_strdup(optarg);
break;
case 'd':
- pg_logging_set_level(PG_LOG_DEBUG);
+ pg_logging_increase_verbosity();
break;
case 'c':
benchmarking_option_set = true;
log_flags = new_flags;
}
+/*
+ * pg_logging_init sets the default log level to INFO. Programs that prefer
+ * a different default should use this to set it, immediately afterward.
+ */
void
pg_logging_set_level(enum pg_log_level new_level)
{
__pg_log_level = new_level;
}
+/*
+ * Command line switches such as --verbose should invoke this.
+ */
+void
+pg_logging_increase_verbosity(void)
+{
+ /*
+ * The enum values are chosen such that we have to decrease __pg_log_level
+ * in order to become more verbose.
+ */
+ if (__pg_log_level > PG_LOG_NOTSET + 1)
+ __pg_log_level--;
+}
+
void
pg_logging_set_pre_callback(void (*cb) (void))
{
void pg_logging_init(const char *argv0);
void pg_logging_config(int new_flags);
void pg_logging_set_level(enum pg_log_level new_level);
+void pg_logging_increase_verbosity(void);
void pg_logging_set_pre_callback(void (*cb) (void));
void pg_logging_set_locus_callback(void (*cb) (const char **filename, uint64 *lineno));