X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-logger-internals.h;h=4a83afd5228feebe46deafcc847a97dd234a5de6;hb=HEAD;hp=ee88665ae6c185ceaf09da5d3b9ba6edf887d5d6;hpb=61374d794c5d7084785b13ae8fa90c5c1a4680e8;p=mono.git diff --git a/mono/utils/mono-logger-internals.h b/mono/utils/mono-logger-internals.h index ee88665ae6c..4a83afd5228 100644 --- a/mono/utils/mono-logger-internals.h +++ b/mono/utils/mono-logger-internals.h @@ -1,7 +1,12 @@ +/** + * \file + */ + #ifndef __MONO_LOGGER_INTERNAL_H__ #define __MONO_LOGGER_INTERNAL_H__ #include +#include #include "mono-logger.h" G_BEGIN_DECLS @@ -16,6 +21,8 @@ typedef enum { MONO_TRACE_SECURITY = (1<<6), MONO_TRACE_THREADPOOL = (1<<7), MONO_TRACE_IO_THREADPOOL = (1<<8), + MONO_TRACE_IO_LAYER = (1<<9), + MONO_TRACE_W32HANDLE = (1<<10), MONO_TRACE_ALL = MONO_TRACE_ASSEMBLY | MONO_TRACE_TYPE | MONO_TRACE_DLLIMPORT | @@ -24,17 +31,22 @@ typedef enum { MONO_TRACE_AOT | MONO_TRACE_SECURITY | MONO_TRACE_THREADPOOL | - MONO_TRACE_IO_THREADPOOL + MONO_TRACE_IO_THREADPOOL | + MONO_TRACE_IO_LAYER | + MONO_TRACE_W32HANDLE } MonoTraceMask; -void -mono_trace_cleanup (void); +MONO_API extern GLogLevelFlags mono_internal_current_level; +MONO_API extern MonoTraceMask mono_internal_current_mask; void -mono_trace (GLogLevelFlags level, MonoTraceMask mask, const char *format, ...); +mono_trace_init (void); void -mono_tracev (GLogLevelFlags level, MonoTraceMask mask, const char *format, va_list args); +mono_trace_cleanup (void); + +MONO_API void +mono_tracev_inner (GLogLevelFlags level, MonoTraceMask mask, const char *format, va_list args); void mono_trace_set_level (GLogLevelFlags level); @@ -51,6 +63,33 @@ mono_trace_pop (void); gboolean mono_trace_is_traced (GLogLevelFlags level, MonoTraceMask mask); +G_GNUC_UNUSED static void +mono_tracev (GLogLevelFlags level, MonoTraceMask mask, const char *format, va_list args) +{ + if(G_UNLIKELY (level <= mono_internal_current_level && mask & mono_internal_current_mask)) + mono_tracev_inner (level, mask, format, args); +} + +/** + * mono_trace: + * + * @level: Verbose level of the specified message + * @mask: Type of the specified message + * + * Traces a new message, depending on the current logging level + * and trace mask. + */ +G_GNUC_UNUSED MONO_ATTR_FORMAT_PRINTF(3,4) static void +mono_trace (GLogLevelFlags level, MonoTraceMask mask, const char *format, ...) +{ + if(G_UNLIKELY (level <= mono_internal_current_level && mask & mono_internal_current_mask)) { + va_list args; + va_start (args, format); + mono_tracev_inner (level, mask, format, args); + va_end (args); + } +} + #ifdef G_HAVE_ISO_VARARGS #define mono_trace_error(...) mono_trace(G_LOG_LEVEL_ERROR, \ __VA_ARGS__) @@ -95,11 +134,13 @@ mono_trace_message(MonoTraceMask mask, const char *format, ...) #endif /* !__GNUC__ */ -#if defined (PLATFORM_ANDROID) || (defined (TARGET_IOS) && defined (TARGET_IOS)) +#if defined (HOST_ANDROID) || (defined (TARGET_IOS) && defined (TARGET_IOS)) #define mono_gc_printf(gc_log_file, format, ...) g_log ("mono-gc", G_LOG_LEVEL_MESSAGE, format, ##__VA_ARGS__) #define mono_runtime_printf(format, ...) g_log ("mono-rt", G_LOG_LEVEL_MESSAGE, format "\n", ##__VA_ARGS__) #define mono_runtime_printf_err(format, ...) g_log ("mono-rt", G_LOG_LEVEL_CRITICAL, format "\n", ##__VA_ARGS__) +#define mono_profiler_printf(format, ...) g_log ("mono-prof", G_LOG_LEVEL_MESSAGE, format "\n", ##__VA_ARGS__) +#define mono_profiler_printf_err(format, ...) g_log ("mono-prof", G_LOG_LEVEL_CRITICAL, format "\n", ##__VA_ARGS__) #define mono_runtime_stdout_fflush() do { } while (0) #else @@ -111,10 +152,50 @@ mono_trace_message(MonoTraceMask mask, const char *format, ...) #define mono_runtime_printf(format, ...) fprintf (stdout, format "\n", ##__VA_ARGS__) #define mono_runtime_printf_err(format, ...) fprintf (stderr, format "\n", ##__VA_ARGS__) +#define mono_profiler_printf(format, ...) fprintf (stdout, format "\n", ##__VA_ARGS__) +#define mono_profiler_printf_err(format, ...) fprintf (stderr, format "\n", ##__VA_ARGS__) #define mono_runtime_stdout_fflush() do { fflush (stdout); } while (0) #endif +/* Internal logging API */ +typedef void (*MonoLoggerOpen) (const char *, void *); +typedef void (*MonoLoggerWrite) (const char *, GLogLevelFlags, mono_bool, const char *); +typedef void (*MonoLoggerClose) (void); + +typedef struct _MonoLogCallParm_ { + MonoLoggerOpen opener; /* Routine to open logging */ + MonoLoggerWrite writer; /* Routine to write log data */ + MonoLoggerClose closer; /* Routine to close logging */ + char *dest; /* Log destination */ + void *user_data; /* User data from legacy handler */ + mono_bool header; /* Whether we want pid/time/date in log message */ +} MonoLogCallParm; + +void mono_trace_set_log_handler_internal (MonoLogCallParm *callback, void *user_data); +void mono_trace_set_logdest_string (const char *value); +void mono_trace_set_logheader_string (const char *value); + +void mono_log_open_syslog (const char *, void *); +void mono_log_write_syslog (const char *, GLogLevelFlags, mono_bool, const char *); +void mono_log_close_syslog (void); + +void mono_log_open_logfile (const char *, void *); +void mono_log_write_logfile (const char *, GLogLevelFlags, mono_bool, const char *); +void mono_log_close_logfile (void); + +#if HOST_ANDROID +void mono_log_open_logcat (const char *path, void *userData); +void mono_log_write_logcat (const char *log_domain, GLogLevelFlags level, mono_bool hdr, const char *message); +void mono_log_close_logcat (void); +#endif + +#if defined(HOST_IOS) +void mono_log_open_asl (const char *path, void *userData); +void mono_log_write_asl (const char *log_domain, GLogLevelFlags level, mono_bool hdr, const char *message); +void mono_log_close_asl (void); + +#endif G_END_DECLS