Changeset: db07269c5555 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/db07269c5555
Modified Files:
        gdk/gdk_tracer.c
Branch: default
Log Message:

No output of WARNING or below to the tracer file by default

CRITICAL, ERROR, and WARNING messages are always written in stderr. If
the user has not initialized the tracer explicitly, either by
requiring logging of a component or a layer, or by requesting logging
output in a non-default file, then these messages are not written to
the adapter.


diffs (89 lines):

diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -32,6 +32,8 @@ static ATOMIC_TYPE cur_adapter = ATOMIC_
 
 static log_level_t cur_flush_level = DEFAULT_FLUSH_LEVEL;
 
+static bool write_to_tracer = false;
+
 #define GENERATE_LOG_LEVEL(COMP) DEFAULT_LOG_LEVEL,
 log_level_t lvl_per_component[] = {
        FOREACH_COMP(GENERATE_LOG_LEVEL)
@@ -81,6 +83,14 @@ static const char *level_str[] = {
                ## __VA_ARGS__);
 
 
+#define GDK_TRACER_RESET_OUTPUT()                                      \
+       do {                                                            \
+               write_to_tracer = false;                                \
+               for (int i = 0; i < (int) COMPONENTS_COUNT; i++) {      \
+                       write_to_tracer = write_to_tracer || 
lvl_per_component[i] > DEFAULT_LOG_LEVEL; \
+               }                                                       \
+       } while(0)
+
 static inline char *
 get_timestamp(char *datetime, size_t dtsz)
 {
@@ -99,6 +109,7 @@ static gdk_return
 GDKtracer_init_trace_file(const char *dbpath, const char *dbtrace)
 {
        if (dbtrace == NULL) {
+               write_to_tracer = false;
                if (dbpath == NULL) {
                        active_tracer = stderr;
                        return GDK_SUCCEED;
@@ -109,6 +120,7 @@ GDKtracer_init_trace_file(const char *db
                        goto too_long;
                }
        } else {
+               write_to_tracer = true;
                if (strcpy_len(file_name, dbtrace, sizeof(file_name))
                    >= sizeof(file_name)) {
                        goto too_long;
@@ -141,7 +153,6 @@ static gdk_return
                                         GDKgetenv("gdk_dbtrace"));
 }
 
-
 static void
 set_level_for_layer(int layer, int lvl)
 {
@@ -179,6 +190,9 @@ set_level_for_layer(int layer, int lvl)
                        }
                }
        }
+       MT_lock_set(&GDKtracer_lock);
+       GDK_TRACER_RESET_OUTPUT();
+       MT_lock_unset(&GDKtracer_lock);
 }
 
 static inline adapter_t
@@ -310,6 +324,7 @@ GDKtracer_set_component_level(const char
        if (file_name[0] == 0) {
                _GDKtracer_init_basic_adptr();
        }
+       write_to_tracer = write_to_tracer || level > DEFAULT_LOG_LEVEL;
        MT_lock_unset(&GDKtracer_lock);
 
        lvl_per_component[component] = level;
@@ -340,6 +355,10 @@ GDKtracer_reset_component_level(const ch
                return GDK_FAIL;
        }
        lvl_per_component[component] = DEFAULT_LOG_LEVEL;
+       MT_lock_set(&GDKtracer_lock);
+       GDK_TRACER_RESET_OUTPUT();
+       MT_lock_unset(&GDKtracer_lock);
+
        return GDK_SUCCEED;
 }
 
@@ -530,7 +549,7 @@ GDKtracer_log(const char *file, const ch
                        MT_thread_getname(), func, level_str[level] + 2,
                        msg, syserr ? ": " : "",
                        syserr ? syserr : "");
-               if (active_tracer == NULL || active_tracer == stderr)
+               if (active_tracer == NULL || active_tracer == stderr || 
!write_to_tracer)
                        return;
        }
        if (active_tracer == NULL)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to