chiark / gitweb /
test-example: all-privkeys: Define, and indirect through, a variable
[secnet.git] / log.c
diff --git a/log.c b/log.c
index 4043ab0c6a0b99fd4220c81b01f84e4d70b0babc..3efd289fe67f9efc9051a07c84a2f83b58a06b51 100644 (file)
--- a/log.c
+++ b/log.c
@@ -130,7 +130,8 @@ void fatal_perror_status(int status, const char *message, ...)
 }
 
 void vcfgfatal_maybefile(FILE *maybe_f /* or 0 */, struct cloc loc,
-                        cstring_t facility, const char *message, va_list args)
+                        cstring_t facility, const char *message, va_list args,
+                        const char *suffix)
 {
     enter_phase(PHASE_SHUTDOWN);
 
@@ -152,6 +153,7 @@ void vcfgfatal_maybefile(FILE *maybe_f /* or 0 */, struct cloc loc,
     }
     
     vMessage(M_FATAL,message,args);
+    Message(M_FATAL,"%s",suffix);
     exit(current_phase);
 }
 
@@ -161,7 +163,7 @@ void cfgfatal_maybefile(FILE *maybe_f, struct cloc loc, cstring_t facility,
     va_list args;
 
     va_start(args,message);
-    vcfgfatal_maybefile(maybe_f,loc,facility,message,args);
+    vcfgfatal_maybefile(maybe_f,loc,facility,message,args,0);
     va_end(args);
 }    
 
@@ -170,10 +172,16 @@ void cfgfatal(struct cloc loc, cstring_t facility, const char *message, ...)
     va_list args;
 
     va_start(args,message);
-    vcfgfatal_maybefile(0,loc,facility,message,args);
+    vcfgfatal_maybefile(0,loc,facility,message,args,"");
     va_end(args);
 }
 
+void cfgfile_log__vmsg(void *sst, int class, const char *message, va_list args)
+{
+    struct cfgfile_log *st=sst;
+    vcfgfatal_maybefile(0,st->loc,st->facility,message,args,"\n");
+}
+
 void cfgfile_postreadcheck(struct cloc loc, FILE *f)
 {
     assert(loc.file);
@@ -308,6 +316,7 @@ struct logfile {
     string_t logfile;
     uint32_t level;
     FILE *f;
+    const char *prefix;
     bool_t forked;
 };
 
@@ -330,22 +339,17 @@ static void logfile_vlog(void *sst, int class, const char *message,
        pidbuf[0]=0;
     }
 
-    if (secnet_is_daemon && st->f) {
-       if (class&st->level) {
-           t=time(NULL);
-           tm=localtime(&t);
-           fprintf(st->f,"%s %2d %02d:%02d:%02d %s",
-                   months[tm->tm_mon],tm->tm_mday,tm->tm_hour,tm->tm_min,
-                   tm->tm_sec,
-                   pidbuf);
-           vfprintf(st->f,message,args);
-           fprintf(st->f,"\n");
-           fflush(st->f);
-       }
-    } else {
-       if (pidbuf[0]) MessageFallback(class,"%s",pidbuf);
-       vMessageFallback(class,message,args);
-       MessageFallback(class,"\n");
+    if (class&st->level) {
+       t=time(NULL);
+       tm=localtime(&t);
+       fprintf(st->f,"%s %2d %02d:%02d:%02d %s%s%s",
+               months[tm->tm_mon],tm->tm_mday,tm->tm_hour,tm->tm_min,
+               tm->tm_sec,
+               st->prefix, st->prefix[0] ? " " : "",
+               pidbuf);
+       vfprintf(st->f,message,args);
+       fprintf(st->f,"\n");
+       fflush(st->f);
     }
 }
 
@@ -433,6 +437,7 @@ static list_t *logfile_apply(closure_t *self, struct cloc loc, dict_t *context,
     st->ops.buff[0]=0;
     st->loc=loc;
     st->f=stderr;
+    st->prefix="";
     st->forked=0;
 
     item=list_elem(args,0);
@@ -442,6 +447,8 @@ static list_t *logfile_apply(closure_t *self, struct cloc loc, dict_t *context,
     dict=item->data.dict;
 
     st->logfile=dict_read_string(dict,"filename",False,"logfile",loc);
+    st->prefix=dict_read_string(dict,"prefix",False,"logfile",loc);
+    if (!st->prefix) st->prefix="";
     st->level=string_list_to_word(dict_lookup(dict,"class"),
                                       message_class_table,"logfile");