]> mj.ucw.cz Git - libucw.git/commitdiff
Logging: Let the log level mask be configurable.
authorMartin Mares <mj@ucw.cz>
Thu, 19 Feb 2009 16:22:44 +0000 (17:22 +0100)
committerMartin Mares <mj@ucw.cz>
Thu, 19 Feb 2009 16:22:44 +0000 (17:22 +0100)
cf/libucw
ucw/lib.h
ucw/log-conf.c

index 00dba877ade070ee764450c38f3cbe0e78ab92df..a6f19919b2ddc82a6b6e127f430fa41a676d5a79 100644 (file)
--- a/cf/libucw
+++ b/cf/libucw
@@ -186,6 +186,7 @@ Stream {
        Name            logfile2
        FileName        log/test2
        Microseconds    1
+       Levels:reset    warn error
 }
 
 Stream {
index 0ec021925e0a26b4ae8d8a3a9fafcf77b5868deb..5167e24e05357ebab137ab15c2bfee94a796ee0f 100644 (file)
--- a/ucw/lib.h
+++ b/ucw/lib.h
@@ -102,6 +102,8 @@ enum log_levels {                   /** The available log levels to pass to msg() and friends. *
   L_FATAL,                             // '!' - Fatal error
 };
 
+#define LOG_LEVEL_NAMES P(DEBUG) P(INFO) P(WARN) P(ERROR) P(INFO_R) P(WARN_R) P(ERROR_R) P(FATAL)
+
 #define L_SIGHANDLER 0x80000000                /** Avoid operations that are unsafe in signal handlers **/
 
 /**
index 47feceae23948b7f93a991077192b3c95502e4db..6a92c20e157ecaabe6c00c36ab745b9266ff85ff 100644 (file)
@@ -20,6 +20,7 @@ struct stream_config {
   char *name;
   char *file_name;
   char *syslog_facility;
+  u32 levels;
   clist substreams;                    // simple_list of names
   int microseconds;                    // Enable logging of precise timestamps
   int syslog_pids;
@@ -27,6 +28,15 @@ struct stream_config {
   int mark;                            // Used temporarily in log_config_commit()
 };
 
+static char *
+stream_init(void *ptr)
+{
+  struct stream_config *c = ptr;
+
+  c->levels = ~0U;
+  return NULL;
+}
+
 static char *
 stream_commit(void *ptr)
 {
@@ -41,14 +51,23 @@ stream_commit(void *ptr)
   return NULL;
 }
 
+static const char * const level_names[] = {
+#define P(x) #x,
+  LOG_LEVEL_NAMES
+#undef P
+  NULL
+};
+
 static struct cf_section stream_config = {
   CF_TYPE(struct stream_config),
+  CF_INIT(stream_init),
   CF_COMMIT(stream_commit),
   CF_ITEMS {
 #define P(x) PTR_TO(struct stream_config, x)
     CF_STRING("Name", P(name)),
     CF_STRING("FileName", P(file_name)),
     CF_STRING("SyslogFacility", P(syslog_facility)),
+    CF_BITMAP_LOOKUP("Levels", P(levels), level_names),
     CF_LIST("Substream", P(substreams), &cf_string_list_config),
     CF_INT("Microseconds", P(microseconds)),
     CF_INT("SyslogPID", P(syslog_pids)),
@@ -149,6 +168,7 @@ do_new_configured(struct stream_config *c)
   CLIST_FOR_EACH(simp_node *, s, c->substreams)
     log_add_substream(ls, do_new_configured(stream_find(s->s)));
 
+  ls->levels = c->levels;
   if (c->microseconds)
     ls->msgfmt |= LSFMT_USEC;