70 // replace the current one |
70 // replace the current one |
71 _log_output_ctx.func = func ? func : log_default_func; |
71 _log_output_ctx.func = func ? func : log_default_func; |
72 _log_output_ctx.arg = arg; |
72 _log_output_ctx.arg = arg; |
73 } |
73 } |
74 |
74 |
75 void log_output_tag (enum log_level level, const char *tag, const char *func, const char *user_fmt, va_list user_fmtargs, const char *log_fmt, ...) |
75 void log_output_tag_va (enum log_level level, const char *tag, const char *func, const char *user_fmt, va_list user_fmtargs, const char *log_fmt, va_list log_fmtargs) |
76 { |
76 { |
77 char buf[LOG_MSG_MAX], *buf_ptr = buf; |
77 char buf[LOG_MSG_MAX], *buf_ptr = buf; |
78 size_t buf_size = sizeof(buf); |
78 size_t buf_size = sizeof(buf); |
79 |
79 |
80 // filter out? |
80 // filter out? |
87 // output the user data |
87 // output the user data |
88 if (user_fmt) |
88 if (user_fmt) |
89 buf_ptr += str_advance(NULL, &buf_size, str_append_fmt_va(buf_ptr, buf_size, user_fmt, user_fmtargs)); |
89 buf_ptr += str_advance(NULL, &buf_size, str_append_fmt_va(buf_ptr, buf_size, user_fmt, user_fmtargs)); |
90 |
90 |
91 // output the suffix |
91 // output the suffix |
92 if (log_fmt) { |
92 if (log_fmt) |
93 va_list vargs; |
93 buf_ptr += str_advance(NULL, &buf_size, str_append_fmt_va(buf_ptr, buf_size, log_fmt, log_fmtargs)); |
94 |
|
95 va_start(vargs, log_fmt); |
|
96 buf_ptr += str_advance(NULL, &buf_size, str_append_fmt_va(buf_ptr, buf_size, log_fmt, vargs)); |
|
97 va_end(vargs); |
|
98 } |
|
99 |
94 |
100 // send it to the output func |
95 // send it to the output func |
101 _log_output_ctx.func(buf, _log_output_ctx.arg); |
96 _log_output_ctx.func(buf, _log_output_ctx.arg); |
|
97 |
|
98 } |
|
99 |
|
100 void log_output_tag (enum log_level level, const char *tag, const char *func, const char *user_fmt, va_list user_fmtargs, const char *log_fmt, ...) |
|
101 { |
|
102 va_list vargs; |
|
103 |
|
104 va_start(vargs, log_fmt); |
|
105 log_output_tag_va(level, tag, func, user_fmt, user_fmtargs, log_fmt, vargs); |
|
106 va_end(vargs); |
102 } |
107 } |
103 |
108 |
104 void _log_msg (enum log_level level, const char *func, const char *format, ...) |
109 void _log_msg (enum log_level level, const char *func, const char *format, ...) |
105 { |
110 { |
106 va_list vargs; |
111 va_list vargs; |
107 |
112 |
108 // formatted output: no suffix |
113 // formatted output: no suffix |
109 va_start(vargs, format); |
114 va_start(vargs, format); |
110 log_output_tag(level, log_level_name(level), func, format, vargs, NULL); |
115 log_output_tag(level, log_level_name(level), func, format, vargs, NULL); |
111 va_end(vargs); |
116 va_end(vargs); |
|
117 } |
|
118 |
|
119 void _log_msg_va2 (enum log_level level, const char *func, const char *fmt1, va_list fmtargs1, const char *fmt2, va_list fmtargs2) |
|
120 { |
|
121 log_output_tag_va(level, log_level_name(level), func, fmt1, fmtargs1, fmt2, fmtargs2); |
112 } |
122 } |
113 |
123 |
114 void _log_err (enum log_level level, err_t err, const char *func, const char *format, ...) |
124 void _log_err (enum log_level level, err_t err, const char *func, const char *format, ...) |
115 { |
125 { |
116 va_list vargs; |
126 va_list vargs; |