log_util.c
Go to the documentation of this file.
1 
9 #include "log_util.h"
10 #include "mcl_core/mcl_assert.h"
11 #include <stdarg.h>
12 #include <stdio.h>
13 
14 #if !MCL_LOG_DISABLED
15 
16 static void _mcl_log_util_default_callback(void *user_context, int log_level, const char *file, int line, const char *tag, const char * const format, ...);
18 
21 
22 static const char *_mcl_level_strings[] =
23 {
24  "VERBOSE",
25  "DEBUG",
26  "INFO",
27  "WARN",
28  "ERROR",
29  "FATAL"
30 };
31 #endif
32 
34 {
35 #if !MCL_LOG_DISABLED
36  if (((MCL_LOG_LEVEL <= log_level) && (log_level <= MCL_LOG_LEVEL_FATAL)) || (MCL_LOG_LEVEL_NONE == log_level))
37  {
38  _mcl_log_level = log_level;
39  return MCL_OK;
40  }
41 #else
42  if (MCL_LOG_LEVEL_NONE == log_level)
43  {
44  return MCL_OK;
45  }
46 #endif
47 
48  return MCL_INVALID_LOG_LEVEL;
49 }
50 
52 {
53 #if !MCL_LOG_DISABLED
54  return _mcl_log_level;
55 #else
56  return MCL_LOG_LEVEL_NONE;
57 #endif
58 }
59 
61 {
62 #if !MCL_LOG_DISABLED
63  mcl_error_t code = MCL_OK;
64 
65  MCL_DEBUG_ENTRY("mcl_log_util_callback_t callback = <%p>, void *user_context = <%p>", callback, user_context);
66 
67  MCL_ASSERT_NOT_NULL(callback, code);
68 
69  mcl_log_util_function = callback;
70  mcl_log_util_user_context = user_context;
71 
73  MCL_DEBUG_LEAVE("retVal = <%d>", code);
74  return code;
75 #else
76  return MCL_FAIL;
77 #endif
78 }
79 
80 #if !MCL_LOG_DISABLED
81 static void _mcl_log_util_default_callback(void *user_context, int log_level, const char *file, int line, const char *tag, const char * const format, ...)
82 {
83  va_list args;
84  va_start(args, format);
85 
86  // user_context will not be used.
87  (void) user_context;
88 
89 #if defined(WIN32) || defined(WIN64)
90  printf_s("MCL | %s | %s | %d | %s | ", _mcl_level_strings[log_level - MCL_LOG_LEVEL_VERBOSE], file, line, tag);
91  vprintf_s(format, args);
92  putchar('\r');
93 #else
94  printf("MCL | %s | %s | %d | %s | ", _mcl_level_strings[log_level - MCL_LOG_LEVEL_VERBOSE], file, line, tag);
95  vprintf(format, args);
96 #endif
97 
98  putchar('\n');
99  va_end(args);
100 }
101 #endif
#define MCL_FUNCTION_LEAVE_LABEL
static void _mcl_log_util_default_callback(void *user_context, int log_level, const char *file, int line, const char *tag, const char *const format,...)
Definition: log_util.c:81
Given log level is invalid.
Assert module header file.
Success.
int mcl_log_util_get_output_level(void)
Definition: log_util.c:51
mcl_int32_t mcl_error_t
#define MCL_DEBUG_ENTRY(...)
Definition: mcl_log_util.h:115
Log utility module header file.
void * mcl_log_util_user_context
Definition: log_util.c:20
#define MCL_LOG_LEVEL_VERBOSE
Definition: mcl_config.h:12
static int _mcl_log_level
Definition: log_util.c:17
mcl_log_util_callback_t mcl_log_util_function
Definition: log_util.c:19
static const char * _mcl_level_strings[]
Definition: log_util.c:22
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
Definition: mcl_assert.h:38
mcl_error_t mcl_log_util_set_output_level(const int log_level)
Definition: log_util.c:33
#define MCL_LOG_LEVEL_NONE
Definition: mcl_config.h:18
#define MCL_LOG_LEVEL
Definition: mcl_config.h:44
mcl_error_t mcl_log_util_set_callback(mcl_log_util_callback_t callback, void *user_context)
Definition: log_util.c:60
#define MCL_LOG_LEVEL_FATAL
Definition: mcl_config.h:17
#define MCL_DEBUG_LEAVE(...)
Definition: mcl_log_util.h:116
Internal failure in MCL.
void(* mcl_log_util_callback_t)(void *user_context, int log_level, const char *file, int line, const char *tag, const char *const format,...)
Definition: mcl_log_util.h:31