2 * mono-log-common.c: Platform-independent interface to the logger
4 * This module contains the POSIX syslog logger interface
7 * Neale Ferguson <neale@sinenomine.net>
26 #include "mono-logger.h"
28 static FILE *logFile = NULL;
29 static void *logUserData = NULL;
34 * @level - GLogLevelFlags value
35 * @returns The equivalent character identifier
38 mapLogFileLevel(GLogLevelFlags level)
40 if (level & G_LOG_LEVEL_ERROR)
42 if (level & G_LOG_LEVEL_CRITICAL)
44 if (level & G_LOG_LEVEL_WARNING)
46 if (level & G_LOG_LEVEL_MESSAGE)
48 if (level & G_LOG_LEVEL_INFO)
50 if (level & G_LOG_LEVEL_DEBUG)
56 * mono_log_open_logfile
58 * Open the logfile. If the path is not specified default to stdout. If the
59 * open fails issue a warning and use stdout as the log file destination.
61 * @path - Path for log file
62 * @userData - Not used
65 mono_log_open_logfile(const char *path, void *userData)
70 logFile = fopen(path, "w");
71 if (logFile == NULL) {
72 g_warning("opening of log file %s failed with %s - defaulting to stdout",
73 path, strerror(errno));
76 logUserData = userData;
80 * mono_log_write_logfile
82 * Write data to the log file.
84 * @domain - Identifier string
85 * @level - Logging level flags
86 * @format - Printf format string
87 * @vargs - Variable argument list
90 mono_log_write_logfile(const char *domain, GLogLevelFlags level, mono_bool hdr, const char *format, va_list args)
106 localtime_r(&t, &tod);
112 strftime(logTime, sizeof(logTime), "%F %T", &tod);
113 iLog = snprintf(logMessage, sizeof(logMessage), "%s level[%c] mono[%d]: ",
114 logTime,mapLogFileLevel(level),pid);
116 nLog = sizeof(logMessage) - iLog - 2;
117 iLog = vsnprintf(logMessage+iLog, nLog, format, args);
118 logMessage[iLog++] = '\n';
119 logMessage[iLog++] = '\0';
120 fputs(logMessage, logFile);
123 if (level == G_LOG_FLAG_FATAL)
128 * mono_log_close_logfile
133 mono_log_close_logfile()
136 if (logFile != stdout)