Add environment variable to control log header
authorNeale Ferguson <neale@sinenomine.net>
Mon, 25 Apr 2016 23:26:40 +0000 (19:26 -0400)
committerNeale Ferguson <neale@sinenomine.net>
Mon, 25 Apr 2016 23:26:40 +0000 (19:26 -0400)
mono/utils/mono-log-common.c
mono/utils/mono-log-posix.c
mono/utils/mono-log-windows.c
mono/utils/mono-logger.c
mono/utils/mono-logger.h

index 10f1f2f70ea8e4d38b800934972dcb2b47cd8859..90118efbc2525f6dc4ef29f8af85579ae650c144 100644 (file)
@@ -85,23 +85,32 @@ mono_log_open_logfile(const char *path, void *userData)
  *     @vargs - Variable argument list
  */
 void
-mono_log_write_logfile(const char *domain, GLogLevelFlags level, const char *format, va_list args)
+mono_log_write_logfile(const char *domain, GLogLevelFlags level, mono_bool hdr, const char *format, va_list args)
 {
        time_t t;
        struct tm tod;
-       char logTime[80];
+       char logTime[80],       
+            logMessage[512];
        pid_t pid;
+       int iLog = 0;
+       size_t nLog;
 
        if (logFile == NULL)
                logFile = stdout;
 
-       time(&t);
-       localtime_r(&t, &tod);
-       pid = getpid();
-       strftime(logTime, sizeof(logTime), "%F %T", &tod);
-       fprintf(logFile, "%s level[%c] mono[%d]: ",logTime,mapLogFileLevel(level),pid);
-       vfprintf(logFile, format, args);
-       fputc('\n', logFile);
+       if (hdr) {
+               time(&t);
+               localtime_r(&t, &tod);
+               pid = getpid();
+               strftime(logTime, sizeof(logTime), "%F %T", &tod);
+               iLog = snprintf(logMessage, sizeof(logMessage), "%s level[%c] mono[%d]: ",
+                               logTime,mapLogFileLevel(level),pid);
+       }
+       nLog = sizeof(logMessage) - iLog - 2;
+       iLog = vsnprintf(logMessage+iLog, nLog, format, args);
+       logMessage[iLog++] = '\n';
+       logMessage[iLog++] = '\0';
+       fputs(logMessage, logFile);
        fflush(logFile);
 
        if (level == G_LOG_FLAG_FATAL)
index 172b2e20c498eed714141a2e68bc410f9bd6028f..1ce111c1762e2ee67fea21015345fa6ea4c7ffdb 100644 (file)
@@ -80,7 +80,7 @@ mono_log_open_syslog(const char *ident, void *userData)
  *     @vargs - Variable argument list
  */
 void
-mono_log_write_syslog(const char *domain, GLogLevelFlags level, const char *format, va_list args)
+mono_log_write_syslog(const char *domain, GLogLevelFlags level, mono_bool hdr, const char *format, va_list args)
 {
        vsyslog(mapSyslogLevel(level), format, args);
 
index 3bda2b9edb6871bf919609fbc3efde532f52878e..e85e808348ffa7ee3018b0933d9b43cfdadd9b84 100644 (file)
@@ -84,7 +84,7 @@ mono_log_open_syslog(const char *ident, void *userData)
  *     @vargs - Variable argument list
  */
 void
-mono_log_write_syslog(const char *domain, GLogLevelFlags level, const char *format, va_list args)
+mono_log_write_syslog(const char *domain, GLogLevelFlags level, mono_bool hdr, const char *format, va_list args)
 {
        time_t t;
        struct tm tod;
index fb73af27aeff6c59abfdbb97d8cc278be1fca55b..c5be7a75b92217e03278a419199db2fc55aff64b 100644 (file)
@@ -21,7 +21,8 @@ static MonoPrintCallback print_callback, printerr_callback;
 static MonoLogCallback logCallback = {
        .opener = NULL,
        .writer = NULL,
-       .closer = NULL
+       .closer = NULL,
+       .header = FALSE
 };
 
 /**
@@ -39,6 +40,7 @@ mono_trace_init (void)
                mono_trace_set_mask_string(g_getenv("MONO_LOG_MASK"));
                mono_trace_set_level_string(g_getenv("MONO_LOG_LEVEL"));
                mono_trace_set_logdest_string(g_getenv("MONO_LOG_DEST"));
+               mono_trace_set_logheader_string(g_getenv("MONO_LOG_HEADER"));
        }
 }
 
@@ -84,7 +86,7 @@ mono_tracev_inner (GLogLevelFlags level, MonoTraceMask mask, const char *format,
                logCallback.closer = mono_log_close_logfile;
                logCallback.opener(NULL, NULL);
        }
-       logCallback.writer(mono_log_domain, level, format, args);
+       logCallback.writer(mono_log_domain, level, logCallback.header, format, args);
 }
 
 /**
@@ -152,6 +154,28 @@ mono_trace_set_logdest_string (const char *dest)
        }
 }
 
+/**
+ * mono_trace_set_logheader:
+ *
+ *     @head: Whether we want pid/date/time header on log messages
+ *
+ * Sets the current logging header option.
+ */
+void 
+mono_trace_set_logheader_string(const char *head)
+{
+       MonoLogCallback logger;
+
+       if(level_stack == NULL)
+               mono_trace_init();
+
+       if (head == NULL) {
+               logger.header = FALSE;
+       } else {
+               logger.header = TRUE;
+       }
+}
+
 /**
  * mono_trace_push:
  *
index 4e0da18d7944b0b0eea5c60bed92902b2b1317b0..3bb54a6886ed83219359716cd78936ac9b5a99aa 100644 (file)
@@ -13,16 +13,20 @@ mono_trace_set_mask_string (const char *value);
 MONO_API void 
 mono_trace_set_logdest_string (const char *value);
 
+MONO_API void 
+mono_trace_set_logheader_string (const char *value);
+
 typedef void (*MonoPrintCallback) (const char *string, mono_bool is_stdout);
 
 typedef void (*MonoLoggerOpen) (const char *, void *);
-typedef void (*MonoLoggerWrite) (const char *, GLogLevelFlags, const char *, ...);
+typedef void (*MonoLoggerWrite) (const char *, GLogLevelFlags, mono_bool, const char *, va_list);
 typedef void (*MonoLoggerClose) (void);
 
 typedef struct _MonoLogCallback_ {
        MonoLoggerOpen  opener;         /* Routine to open logging */
        MonoLoggerWrite writer;         /* Routine to write log data */
        MonoLoggerClose closer;         /* Routine to close logging */
+       mono_bool       header;         /* Whether we want pid/time/date in log message */
 } MonoLogCallback;
 
 MONO_API void
@@ -38,7 +42,7 @@ MONO_API void
 mono_log_open_syslog(const char *, void *);
 
 MONO_API void
-mono_log_write_syslog(const char *, GLogLevelFlags, const char *, va_list);
+mono_log_write_syslog(const char *, GLogLevelFlags, mono_bool, const char *, va_list);
 
 MONO_API void
 mono_log_close_syslog(void);
@@ -47,7 +51,7 @@ MONO_API void
 mono_log_open_logfile(const char *, void *);
 
 MONO_API void
-mono_log_write_logfile(const char *, GLogLevelFlags, const char *, va_list);
+mono_log_write_logfile(const char *, GLogLevelFlags, mono_bool, const char *, va_list);
 
 MONO_API void
 mono_log_close_logfile(void);