ucx/logging.c

changeset 152
3238f65db163
parent 138
7800811078b8
child 153
2d3d1313862a
equal deleted inserted replaced
151:fc8d05972af7 152:3238f65db163
59 void ucx_logger_free(UcxLogger *logger) { 59 void ucx_logger_free(UcxLogger *logger) {
60 ucx_map_free(logger->levels); 60 ucx_map_free(logger->levels);
61 free(logger); 61 free(logger);
62 } 62 }
63 63
64 // estimated max. message length (documented)
65 #define UCX_LOGGER_MSGMAX 4096
66
64 void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char* file, 67 void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char* file,
65 const unsigned int line, const char *format, ...) { 68 const unsigned int line, const char *format, ...) {
66 if (level <= logger->level) { 69 if (level <= logger->level) {
67 const size_t max = 4096; // estimated max. message length (documented) 70 char msg[UCX_LOGGER_MSGMAX];
68 char msg[max];
69 char *text; 71 char *text;
70 size_t k = 0; 72 size_t k = 0;
71 size_t n; 73 size_t n;
72 74
73 if ((logger->mask & UCX_LOGGER_LEVEL) > 0) { 75 if ((logger->mask & UCX_LOGGER_LEVEL) > 0) {
83 } 85 }
84 if ((logger->mask & UCX_LOGGER_SOURCE) > 0) { 86 if ((logger->mask & UCX_LOGGER_SOURCE) > 0) {
85 n = strlen(file); 87 n = strlen(file);
86 memcpy(msg+k, file, n); 88 memcpy(msg+k, file, n);
87 k += n; 89 k += n;
88 k += sprintf(msg+k, ":%d ", line); 90 k += snprintf(msg+k, UCX_LOGGER_MSGMAX-k, ":%d ", line);
89 } 91 }
90 92
91 msg[k++] = '-'; msg[k++] = ' '; 93 msg[k++] = '-'; msg[k++] = ' ';
92 94
93 va_list args; 95 va_list args;
94 va_start (args, format); 96 va_start (args, format);
95 k += vsnprintf(msg+k, max-k-1, format, args); 97 k += vsnprintf(msg+k, UCX_LOGGER_MSGMAX-k-1, format, args);
96 va_end (args); 98 va_end (args);
97 99
98 msg[k++] = '\n'; 100 msg[k++] = '\n';
99 101
100 logger->writer(msg, 1, k, logger->stream); 102 logger->writer(msg, 1, k, logger->stream);

mercurial