/* * fwts_log_print_xml() * print to a log */ static int fwts_log_print_xml( fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *buffer) { struct tm tm; time_t now; char *str; FWTS_UNUSED(prefix); if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return 0; if (field & (LOG_NEWLINE | LOG_SEPARATOR | LOG_DEBUG)) return 0; time(&now); localtime_r(&now, &tm); fprintf(log_file->fp, "%*s<logentry>\n", xml_stack_index * XML_INDENT, ""); fprintf(log_file->fp, "%*s<line_num>%" PRIu32 "</line_num>\n", (xml_stack_index + 1) * XML_INDENT, "", log_file->line_number); fprintf(log_file->fp, "%*s<date>%2.2d/%2.2d/%-2.2d</date>\n", (xml_stack_index + 1) * XML_INDENT, "", tm.tm_mday, tm.tm_mon + 1, (tm.tm_year+1900) % 100); fprintf(log_file->fp, "%*s<time>%2.2d:%2.2d:%2.2d</time>\n", (xml_stack_index + 1) * XML_INDENT, "", tm.tm_hour, tm.tm_min, tm.tm_sec); fprintf(log_file->fp, "%*s<field_type>%s</field_type>\n", (xml_stack_index + 1) * XML_INDENT, "", fwts_log_field_to_str_full(field)); str = fwts_log_level_to_str(level); if (!strcmp(str, " ")) str = "None"; fprintf(log_file->fp, "%*s<level>%s</level>\n", (xml_stack_index + 1) * XML_INDENT, "", str); fprintf(log_file->fp, "%*s<status>%s</status>\n", (xml_stack_index + 1) * XML_INDENT, "", *status ? status : "None"); fprintf(log_file->fp, "%*s<failure_label>%s</failure_label>\n", (xml_stack_index + 1) * XML_INDENT, "", label && *label ? label : "None"); fprintf(log_file->fp, "%*s<log_text>%s</log_text>\n", (xml_stack_index + 1) * XML_INDENT, "", buffer); fprintf(log_file->fp, "%*s</logentry>\n", xml_stack_index * XML_INDENT, ""); fflush(log_file->fp); log_file->line_number++; return 0; }
/* * fwts_log_printf_json() * print to a log */ static int fwts_log_print_json( fwts_log_file *log_file, const fwts_log_field field, const fwts_log_level level, const char *status, const char *label, const char *prefix, const char *buffer) { char tmpbuf[4096]; struct tm tm; time_t now; json_object *header; json_object *json_log = (json_object*)json_stack[json_stack_index-1].log; json_object *obj; char *str; FWTS_UNUSED(prefix); if (!((field & LOG_FIELD_MASK) & fwts_log_filter)) return 0; if (field & (LOG_NEWLINE | LOG_SEPARATOR | LOG_DEBUG)) return 0; time(&now); localtime_r(&now, &tm); if ((header = json_object_new_object()) == NULL) fwts_log_out_of_memory_json(); if ((obj = json_object_new_int(log_file->line_number)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "line_num", obj); snprintf(tmpbuf, sizeof(tmpbuf), "%2.2d/%2.2d/%-2.2d", tm.tm_mday, tm.tm_mon + 1, (tm.tm_year+1900) % 100); if ((obj = json_object_new_string(tmpbuf)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "date", obj); snprintf(tmpbuf, sizeof(tmpbuf), "%2.2d:%2.2d:%2.2d", tm.tm_hour, tm.tm_min, tm.tm_sec); if ((obj = json_object_new_string(tmpbuf)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "time", obj); if ((obj = json_object_new_string(fwts_log_field_to_str_full(field))) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "field_type", obj); str = fwts_log_level_to_str(level); if (!strcmp(str, " ")) str = "None"; if ((obj = json_object_new_string(str)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "level", obj); if ((obj = json_object_new_string(*status ? status : "None")) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "status", obj); if ((obj = json_object_new_string(label && *label ? label : "None")) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "failure_label", obj); /* Redundant really if ((obj = json_object_new_string(log->owner)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "owner", obj); */ if ((obj = json_object_new_string(buffer)) == NULL) fwts_log_out_of_memory_json(); json_object_object_add(header, "log_text", obj); json_object_array_add(json_log, header); log_file->line_number++; /* This is academic really */ return 0; }