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>
24 #include "mono-logger.h"
26 static FILE *logFile
= NULL
;
27 static void *logUserData
= NULL
;
32 * @level - GLogLevelFlags value
33 * @returns The equivalent character identifier
35 static __inline__
char
36 mapLogFileLevel(GLogLevelFlags level
)
38 if (level
& G_LOG_LEVEL_ERROR
)
40 if (level
& G_LOG_LEVEL_CRITICAL
)
42 if (level
& G_LOG_LEVEL_WARNING
)
44 if (level
& G_LOG_LEVEL_MESSAGE
)
46 if (level
& G_LOG_LEVEL_INFO
)
48 if (level
& G_LOG_LEVEL_DEBUG
)
54 * mono_log_open_logfile
56 * Open the logfile. If the path is not specified default to stdout. If the
57 * open fails issue a warning and use stdout as the log file destination.
59 * @path - Path for log file
60 * @userData - Not used
63 mono_log_open_logfile(const char *path
, void *userData
)
68 logFile
= fopen(path
, "w");
69 if (logFile
== NULL
) {
70 g_warning("opening of log file %s failed with %s - defaulting to stdout",
71 path
, strerror(errno
));
74 logUserData
= userData
;
78 * mono_log_write_logfile
80 * Write data to the log file.
82 * @domain - Identifier string
83 * @level - Logging level flags
84 * @format - Printf format string
85 * @vargs - Variable argument list
88 mono_log_write_logfile(const char *domain
, GLogLevelFlags level
, mono_bool hdr
, const char *format
, va_list args
)
103 localtime_r(&t
, &tod
);
105 strftime(logTime
, sizeof(logTime
), "%F %T", &tod
);
106 iLog
= snprintf(logMessage
, sizeof(logMessage
), "%s level[%c] mono[%d]: ",
107 logTime
,mapLogFileLevel(level
),pid
);
109 nLog
= sizeof(logMessage
) - iLog
- 2;
110 iLog
= vsnprintf(logMessage
+iLog
, nLog
, format
, args
);
111 logMessage
[iLog
++] = '\n';
112 logMessage
[iLog
++] = '\0';
113 fputs(logMessage
, logFile
);
116 if (level
== G_LOG_FLAG_FATAL
)
121 * mono_log_close_logfile
126 mono_log_close_logfile()
129 if (logFile
!= stdout
)