void _marpaXmlLog_defaultCallback(void *userDatavp, marpaXmlLogLevel_t logLeveli, const char *msgs) { /* We are NOT going to do a general log4c mechanism (this can come later), using marpaXml in fact */ /* I.e. we are fixing the default output to be: DD/MM/YYYY hh::mm::ss PREFIX MESSAGE */ const char *prefixs = (logLeveli == MARPAXML_LOGLEVEL_TRACE ) ? "TRACE" : (logLeveli == MARPAXML_LOGLEVEL_DEBUG ) ? "DEBUG" : (logLeveli == MARPAXML_LOGLEVEL_INFO ) ? "INFO" : (logLeveli == MARPAXML_LOGLEVEL_NOTICE ) ? "NOTICE" : (logLeveli == MARPAXML_LOGLEVEL_WARNING ) ? "WARNING" : (logLeveli == MARPAXML_LOGLEVEL_ERROR ) ? "ERROR" : (logLeveli == MARPAXML_LOGLEVEL_CRITICAL ) ? "CRITICAL" : (logLeveli == MARPAXML_LOGLEVEL_ALERT ) ? "ALERT" : (logLeveli == MARPAXML_LOGLEVEL_EMERGENCY) ? "EMERGENCY" : "UNKOWN"; char *dates = dateBuilder("%d/%m/%Y %H:%M:%S"); char *localMsgs = messageBuilder("%s %9s %s\n", dates, prefixs, (msgs != NULL) ? (char *) msgs : (char *) MARPAXML_LOG_NO_MESSAGE); #if (defined(_WIN32) || (_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE)) #ifdef _WIN32 int filenoStderr = _fileno(stderr); size_t bytesWriten = 0; #else int filenoStderr = fileno(stderr); ssize_t bytesWriten = 0; #endif char *p = localMsgs; size_t count; #endif #if (defined(_WIN32) || (_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE)) count = strlen(p); while (bytesWriten < count) { #if defined(_WIN32) bytesWriten += _write(filenoStderr, p+bytesWriten, count-bytesWriten); #else bytesWriten += write(filenoStderr, p+bytesWriten, count-bytesWriten); #endif } #else /* Note: this is not asynchroneous safe */ fprintf(stderr, "%s", p); #endif if (dates != dateBuilder_internalErrors()) { free(dates); } if (localMsgs != messageBuilder_internalErrors()) { free(localMsgs); } }
MARPAWRAPPER_EXPORT void _genericLogger_defaultCallback(const void *userDatavp, const genericLoggerLevel_t leveli, const char *msgs) { /* We are NOT going to do a general log4c mechanism (this can come later) */ /* I.e. we are fixing the default output to be: DD/MM/YYYY hh::mm::ss PREFIX MESSAGE */ const char *prefixs = (leveli == GENERICLOGGER_LOGLEVEL_TRACE ) ? "TRACE" : (leveli == GENERICLOGGER_LOGLEVEL_DEBUG ) ? "DEBUG" : (leveli == GENERICLOGGER_LOGLEVEL_INFO ) ? "INFO" : (leveli == GENERICLOGGER_LOGLEVEL_NOTICE ) ? "NOTICE" : (leveli == GENERICLOGGER_LOGLEVEL_WARNING ) ? "WARNING" : (leveli == GENERICLOGGER_LOGLEVEL_ERROR ) ? "ERROR" : (leveli == GENERICLOGGER_LOGLEVEL_CRITICAL ) ? "CRITICAL" : (leveli == GENERICLOGGER_LOGLEVEL_ALERT ) ? "ALERT" : (leveli == GENERICLOGGER_LOGLEVEL_EMERGENCY) ? "EMERGENCY" : "UNKOWN"; char *dates = dateBuilder("%d/%m/%Y %H:%M:%S"); char *localMsgs = messageBuilder("%s %9s %s\n", dates, prefixs, (msgs != NULL) ? (char *) msgs : (char *) GENERICLOGGER_LOG_NO_MESSAGE); char *p = localMsgs; #ifdef FILENO int filenoStderr = FILENO(stderr); #ifdef SYS_FILENO_IS_FILENO ssize_t bytesWriten = 0; #else size_t bytesWriten = 0; #endif size_t count; #endif #ifdef FILENO count = strlen(p); while (bytesWriten < count) { bytesWriten += SYS_WRITE(filenoStderr, p+bytesWriten, count-bytesWriten); } #else /* Note: this is not asynchroneous safe */ fprintf(stderr, "%s", p); #endif if (dates != dateBuilder_internalErrors()) { free(dates); } if (localMsgs != messageBuilder_internalErrors()) { free(localMsgs); } }