]> granicus.if.org Git - postgresql/commitdiff
Provide a log_level setting for auto_explain
authorAndrew Dunstan <andrew@dunslane.net>
Tue, 31 Jul 2018 12:03:57 +0000 (08:03 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Tue, 31 Jul 2018 12:03:57 +0000 (08:03 -0400)
Up to now the log level has been hardcoded at LOG. A new
auto_explain.log_level setting allows that to be modified.

Discussion: https://postgr.es/m/CAPPfruyZh+snR2AdmutrA0B_caj=yWZkLqxUTZYNjJCaQ_wKQg@mail.gmail.com

Tom Dunstan and Andrew Dunstan
Reviewed by Daniel Gustafsson

contrib/auto_explain/auto_explain.c
doc/src/sgml/auto-explain.sgml

index ea4f957cfa0d4538c453b3bacea30b8addfe8c21..76f293cbf4ac5977b580b0264b9d53dac18734dd 100644 (file)
@@ -28,6 +28,7 @@ static bool auto_explain_log_buffers = false;
 static bool auto_explain_log_triggers = false;
 static bool auto_explain_log_timing = true;
 static int     auto_explain_log_format = EXPLAIN_FORMAT_TEXT;
+static int     auto_explain_log_level = LOG;
 static bool auto_explain_log_nested_statements = false;
 static double auto_explain_sample_rate = 1;
 
@@ -39,6 +40,20 @@ static const struct config_enum_entry format_options[] = {
        {NULL, 0, false}
 };
 
+static const struct config_enum_entry loglevel_options[] = {
+       {"debug5", DEBUG5, false},
+       {"debug4", DEBUG4, false},
+       {"debug3", DEBUG3, false},
+       {"debug2", DEBUG2, false},
+       {"debug1", DEBUG1, false},
+       {"debug", DEBUG2, true},
+       {"info", INFO, false},
+       {"notice", NOTICE, false},
+       {"warning", WARNING, false},
+       {"log", LOG, false},
+       {NULL, 0, false}
+};
+
 /* Current nesting depth of ExecutorRun calls */
 static int     nesting_level = 0;
 
@@ -141,6 +156,18 @@ _PG_init(void)
                                                         NULL,
                                                         NULL);
 
+       DefineCustomEnumVariable("auto_explain.log_level",
+                                                        "Log level for the plan.",
+                                                        NULL,
+                                                        &auto_explain_log_level,
+                                                        LOG,
+                                                        loglevel_options,
+                                                        PGC_SUSET,
+                                                        0,
+                                                        NULL,
+                                                        NULL,
+                                                        NULL);
+
        DefineCustomBoolVariable("auto_explain.log_nested_statements",
                                                         "Log nested statements.",
                                                         NULL,
@@ -353,7 +380,7 @@ explain_ExecutorEnd(QueryDesc *queryDesc)
                         * reported.  This isn't ideal but trying to do it here would
                         * often result in duplication.
                         */
-                       ereport(LOG,
+                       ereport(auto_explain_log_level,
                                        (errmsg("duration: %.3f ms  plan:\n%s",
                                                        msec, es->str->data),
                                         errhidestmt(true)));
index 08b67f2600befeeb1370d0387e0d8cc5d5132f77..2b928d0806f2931846a0de68cf566ef8b22e0bfc 100644 (file)
@@ -187,6 +187,27 @@ LOAD 'auto_explain';
     </listitem>
    </varlistentry>
 
+   <varlistentry>
+    <term>
+     <varname>auto_explain.log_level</varname> (<type>enum</type>)
+     <indexterm>
+      <primary><varname>auto_explain.log_level</> configuration parameter</primary>
+     </indexterm>
+    </term>
+    <listitem>
+     <para>
+      <varname>auto_explain.log_level</varname> selects the log level at which
+      auto_explain will log the query plan.
+      Valid values are <literal>DEBUG5</literal>, <literal>DEBUG4</literal>,
+      <literal>DEBUG3</literal>, <literal>DEBUG2</literal>,
+      <literal>DEBUG1</literal>, <literal>INFO</literal>,
+      <literal>NOTICE</literal>, <literal>WARNING</literal>,
+      and <literal>LOG</literal>. The default is <literal>LOG</literal>.
+      Only superusers can change this setting.
+     </para>
+    </listitem>
+   </varlistentry>
+
    <varlistentry>
     <term>
      <varname>auto_explain.log_nested_statements</varname> (<type>boolean</type>)