From f32457bd0be55e25826a3b6ab6f0c029b3c6de09 Mon Sep 17 00:00:00 2001 From: Neale Ferguson Date: Mon, 25 Apr 2016 19:26:40 -0400 Subject: [PATCH] Add environment variable to control log header --- mono/utils/mono-log-common.c | 27 ++++++++++++++++++--------- mono/utils/mono-log-posix.c | 2 +- mono/utils/mono-log-windows.c | 2 +- mono/utils/mono-logger.c | 28 ++++++++++++++++++++++++++-- mono/utils/mono-logger.h | 10 +++++++--- 5 files changed, 53 insertions(+), 16 deletions(-) diff --git a/mono/utils/mono-log-common.c b/mono/utils/mono-log-common.c index 10f1f2f70ea..90118efbc25 100644 --- a/mono/utils/mono-log-common.c +++ b/mono/utils/mono-log-common.c @@ -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) diff --git a/mono/utils/mono-log-posix.c b/mono/utils/mono-log-posix.c index 172b2e20c49..1ce111c1762 100644 --- a/mono/utils/mono-log-posix.c +++ b/mono/utils/mono-log-posix.c @@ -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); diff --git a/mono/utils/mono-log-windows.c b/mono/utils/mono-log-windows.c index 3bda2b9edb6..e85e808348f 100644 --- a/mono/utils/mono-log-windows.c +++ b/mono/utils/mono-log-windows.c @@ -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; diff --git a/mono/utils/mono-logger.c b/mono/utils/mono-logger.c index fb73af27aef..c5be7a75b92 100644 --- a/mono/utils/mono-logger.c +++ b/mono/utils/mono-logger.c @@ -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: * diff --git a/mono/utils/mono-logger.h b/mono/utils/mono-logger.h index 4e0da18d794..3bb54a6886e 100644 --- a/mono/utils/mono-logger.h +++ b/mono/utils/mono-logger.h @@ -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); -- 2.25.1