* vCtdlLogPrintf(): if we are running as deamon, and don't syslog but specified ...
[citadel.git] / citadel / sysdep.c
index deb7f91826729ffa3c38790c1753a5f048f92d23..963af9df6aa84e3d081182cb9d954e51136d93f6 100644 (file)
@@ -93,7 +93,7 @@ int verbosity = DEFAULT_VERBOSITY;            /* Logging level */
 
 int syslog_facility = LOG_DAEMON;
 int enable_syslog = 0;
-
+int print_to_logfile = 1;
 
 /*
  * CtdlLogPrintf()  ...   Write logging information
@@ -113,7 +113,7 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
        }
 
        /* stderr output code */
-       if (enable_syslog || running_as_daemon) return;
+       if (enable_syslog || !print_to_logfile) return;
 
        /* if we run in forground and syslog is disabled, log to terminal */
        if (loglevel <= verbosity) { 
@@ -122,13 +122,23 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                time_t unixtime;
                StrBuf *lBuf;
                CitContext *CCC = CC;
-               
+               ThreadTSD *cTSD = CTP;
+               CtdlThreadNode *node = NULL;
+               long lwpid = 0;
+
+               if (cTSD != NULL) 
+                       node = cTSD->self;
+               if ((node != NULL) && (node->reltid != 0))
+               {
+                       lwpid = node->reltid;
+               }
+
                gettimeofday(&tv, NULL);
                /* Promote to time_t; types differ on some OSes (like darwin) */
                unixtime = tv.tv_sec;
                localtime_r(&unixtime, &tim);
 
-               if (CCC != NULL)
+               if ((CCC != NULL) && (CCC != &masterCC))
                        lBuf = CCC->lBuf;
                else 
                        lBuf = NewStrBuf();
@@ -151,7 +161,7 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                        }
                        vsnprintf(buf2, SIZ, format, arg_ptr);   
 
-                       fprintf(stderr, "%s%s", buf, buf2);
+                       fprintf(stderr, ":%s%s", buf, buf2);
                }
                else {
                        StrBufPrintf(lBuf,
@@ -159,6 +169,12 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                                     tim.tm_year + 1900, tim.tm_mon + 1,
                                     tim.tm_mday, tim.tm_hour, tim.tm_min,
                                     tim.tm_sec, (long)tv.tv_usec);
+
+                       
+                       if (lwpid != 0)
+                               StrBufAppendPrintf(lBuf,
+                                                  "[LWP:%d] ",
+                                                  lwpid);
                                
                        if (CCC != NULL) {
                                if (CCC->cs_pid != 0)
@@ -1346,6 +1362,10 @@ void *select_on_master (void *arg)
        int m;
        int i;
        int retval;
+       struct CitContext select_on_master_CC;
+
+       CtdlFillSystemContext(&select_on_master_CC, "select_on_master");
+       citthread_setspecific(MyConKey, (void *)&select_on_master_CC);
 
        while (!CtdlThreadCheckStop()) {
                /* Initialize the fdset. */
@@ -1449,6 +1469,8 @@ void *select_on_master (void *arg)
                        }
                }
        }
+       CtdlClearSystemContext();
+
        return NULL;
 }