* @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)
* @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);
* @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;
static MonoLogCallback logCallback = {
.opener = NULL,
.writer = NULL,
- .closer = NULL
+ .closer = NULL,
+ .header = FALSE
};
/**
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"));
}
}
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);
}
/**
}
}
+/**
+ * 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:
*
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
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);
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);