[interp] Remove unreachable code (#12411)
[mono-project.git] / mono / utils / mono-logger-internals.h
blob86ce49394ebb156b0cad86e66abf3265a8a9e8a4
1 /**
2 * \file
3 */
5 #ifndef __MONO_LOGGER_INTERNAL_H__
6 #define __MONO_LOGGER_INTERNAL_H__
8 #include <glib.h>
9 #include <mono/utils/mono-compiler.h>
10 #include "mono-logger.h"
12 typedef enum {
13 MONO_TRACE_ASSEMBLY = 1 << 0,
14 MONO_TRACE_TYPE = 1 << 1,
15 MONO_TRACE_DLLIMPORT = 1 << 2,
16 MONO_TRACE_GC = 1 << 3,
17 MONO_TRACE_CONFIG = 1 << 4,
18 MONO_TRACE_AOT = 1 << 5,
19 MONO_TRACE_SECURITY = 1 << 6,
20 MONO_TRACE_THREADPOOL = 1 << 7,
21 MONO_TRACE_IO_SELECTOR = 1 << 8,
22 MONO_TRACE_IO_LAYER_PROCESS = 1 << 9,
23 MONO_TRACE_IO_LAYER_SOCKET = 1 << 10,
24 MONO_TRACE_IO_LAYER_FILE = 1 << 11,
25 MONO_TRACE_IO_LAYER_EVENT = 1 << 12,
26 MONO_TRACE_IO_LAYER_SEMAPHORE = 1 << 13,
27 MONO_TRACE_IO_LAYER_MUTEX = 1 << 14,
28 MONO_TRACE_IO_LAYER_HANDLE = 1 << 15,
29 MONO_TRACE_TAILCALL = 1 << 16,
30 MONO_TRACE_PROFILER = 1 << 17,
31 } MonoTraceMask;
33 MONO_API_DATA GLogLevelFlags mono_internal_current_level;
34 MONO_API_DATA MonoTraceMask mono_internal_current_mask;
36 MONO_API void
37 mono_trace_init (void);
39 void
40 mono_trace_cleanup (void);
42 MONO_API void
43 mono_tracev_inner (GLogLevelFlags level, MonoTraceMask mask, const char *format, va_list args);
45 void
46 mono_trace_set_level (GLogLevelFlags level);
48 void
49 mono_trace_set_mask (MonoTraceMask mask);
51 void
52 mono_trace_push (GLogLevelFlags level, MonoTraceMask mask);
54 void
55 mono_trace_pop (void);
57 gboolean
58 mono_trace_is_traced (GLogLevelFlags level, MonoTraceMask mask);
60 #define MONO_TRACE_IS_TRACED(level, mask) \
61 G_UNLIKELY ((level) <= mono_internal_current_level && ((mask) & mono_internal_current_mask))
63 G_GNUC_UNUSED static void
64 mono_tracev (GLogLevelFlags level, MonoTraceMask mask, const char *format, va_list args)
66 if (MONO_TRACE_IS_TRACED (level, mask))
67 mono_tracev_inner (level, mask, format, args);
70 /**
71 * mono_trace:
73 * @level: Verbose level of the specified message
74 * @mask: Type of the specified message
76 * Traces a new message, depending on the current logging level
77 * and trace mask.
79 G_GNUC_UNUSED MONO_ATTR_FORMAT_PRINTF(3,4) static void
80 mono_trace (GLogLevelFlags level, MonoTraceMask mask, const char *format, ...)
82 if (MONO_TRACE_IS_TRACED (level, mask)) {
83 va_list args;
84 va_start (args, format);
85 mono_tracev_inner (level, mask, format, args);
86 va_end (args);
90 // __VA_ARGS__ is never empty, so a comma before it is always correct.
91 #define mono_trace_error(...) (mono_trace (G_LOG_LEVEL_ERROR, __VA_ARGS__))
92 #define mono_trace_warning(...) (mono_trace (G_LOG_LEVEL_WARNING, __VA_ARGS__))
93 #define mono_trace_message(...) (mono_trace (G_LOG_LEVEL_MESSAGE, __VA_ARGS__))
95 #if defined (HOST_ANDROID) || (defined (TARGET_IOS) && defined (TARGET_IOS))
97 #define mono_gc_printf(gc_log_file, format, ...) g_log ("mono-gc", G_LOG_LEVEL_MESSAGE, format, ##__VA_ARGS__)
98 #define mono_runtime_printf(format, ...) g_log ("mono-rt", G_LOG_LEVEL_MESSAGE, format "\n", ##__VA_ARGS__)
99 #define mono_runtime_printf_err(format, ...) g_log ("mono-rt", G_LOG_LEVEL_CRITICAL, format "\n", ##__VA_ARGS__)
100 #define mono_profiler_printf(format, ...) g_log ("mono-prof", G_LOG_LEVEL_MESSAGE, format "\n", ##__VA_ARGS__)
101 #define mono_profiler_printf_err(format, ...) g_log ("mono-prof", G_LOG_LEVEL_CRITICAL, format "\n", ##__VA_ARGS__)
102 #define mono_runtime_stdout_fflush() do { } while (0)
104 #else
106 #define mono_gc_printf(gc_log_file, format, ...) do { \
107 fprintf (gc_log_file, format, ##__VA_ARGS__); \
108 fflush (gc_log_file); \
109 } while (0)
111 #define mono_runtime_printf(format, ...) fprintf (stdout, format "\n", ##__VA_ARGS__)
112 #define mono_runtime_printf_err(format, ...) fprintf (stderr, format "\n", ##__VA_ARGS__)
113 #define mono_profiler_printf(format, ...) fprintf (stdout, format "\n", ##__VA_ARGS__)
114 #define mono_profiler_printf_err(format, ...) fprintf (stderr, format "\n", ##__VA_ARGS__)
115 #define mono_runtime_stdout_fflush() do { fflush (stdout); } while (0)
117 #endif
119 /* Internal logging API */
120 typedef void (*MonoLoggerOpen) (const char *, void *);
121 typedef void (*MonoLoggerWrite) (const char *, GLogLevelFlags, mono_bool, const char *);
122 typedef void (*MonoLoggerClose) (void);
124 typedef struct {
125 MonoLoggerOpen opener; /* Routine to open logging */
126 MonoLoggerWrite writer; /* Routine to write log data */
127 MonoLoggerClose closer; /* Routine to close logging */
128 char *dest; /* Log destination */
129 void *user_data; /* User data from legacy handler */
130 mono_bool header; /* Whether we want pid/time/date in log message */
131 } MonoLogCallParm;
133 void mono_trace_set_log_handler_internal (MonoLogCallParm *callback, void *user_data);
134 void mono_trace_set_logdest_string (const char *value);
135 void mono_trace_set_logheader_string (const char *value);
137 void mono_log_open_syslog (const char *, void *);
138 void mono_log_write_syslog (const char *, GLogLevelFlags, mono_bool, const char *);
139 void mono_log_close_syslog (void);
141 void mono_log_open_logfile (const char *, void *);
142 void mono_log_write_logfile (const char *, GLogLevelFlags, mono_bool, const char *);
143 void mono_log_close_logfile (void);
145 #if HOST_ANDROID
146 void mono_log_open_logcat (const char *path, void *userData);
147 void mono_log_write_logcat (const char *log_domain, GLogLevelFlags level, mono_bool hdr, const char *message);
148 void mono_log_close_logcat (void);
149 #endif
151 #if defined(HOST_IOS)
152 void mono_log_open_asl (const char *path, void *userData);
153 void mono_log_write_asl (const char *log_domain, GLogLevelFlags level, mono_bool hdr, const char *message);
154 void mono_log_close_asl (void);
155 #endif
157 void mono_log_open_recorder (const char *path, void *userData);
158 void mono_log_write_recorder (const char *log_domain, GLogLevelFlags level, mono_bool hdr, const char *message);
159 void mono_log_close_recorder (void);
160 void mono_log_dump_recorder (void);
162 void mono_dump_mem (gpointer d, int len);
164 #endif /* __MONO_LOGGER_INTERNAL_H__ */