/** * Write the contents of the stored trace to a stream * @param dest string which contains a file name or the special strings stdout or stderr */ int Log_dumpTrace(char* dest) { FILE* file = NULL; ListElement* cur_trace_entry = NULL; const int msgstart = 7; int rc = -1; int trace_queue_index = 0; if ((file = Log_destToFile(dest)) == NULL) { Log(LOG_ERROR, 9, NULL, "trace", dest, "trace entries"); goto exit; } fprintf(file, "=========== Start of trace dump ==========\n"); /* Interleave the log and trace entries together appropriately */ ListNextElement(trace_buffer, &cur_trace_entry); trace_queue_index = start_index; if (trace_queue_index == -1) trace_queue_index = next_index; else { Log_formatTraceEntry(&trace_queue[trace_queue_index++]); if (trace_queue_index == trace_settings.max_trace_entries) trace_queue_index = 0; } while (cur_trace_entry || trace_queue_index != next_index) { if (cur_trace_entry && trace_queue_index != -1) { /* compare these timestamps */ if (Log_compareEntries((char*)cur_trace_entry->content, msg_buf) > 0) cur_trace_entry = NULL; } if (cur_trace_entry) { fprintf(file, "%s\n", &((char*)(cur_trace_entry->content))[msgstart]); ListNextElement(trace_buffer, &cur_trace_entry); } else { fprintf(file, "%s\n", &msg_buf[7]); if (trace_queue_index != next_index) { Log_formatTraceEntry(&trace_queue[trace_queue_index++]); if (trace_queue_index == trace_settings.max_trace_entries) trace_queue_index = 0; } } } fprintf(file, "========== End of trace dump ==========\n\n"); if (file != stdout && file != stderr && file != NULL) fclose(file); rc = 0; exit: return rc; }
void Log_posttrace(int log_level, traceEntry* cur_entry) { if (trace_destination && ((trace_output_level == -1) ? log_level >= trace_settings.trace_level : log_level >= trace_output_level)) { fprintf(trace_destination, "%s\n", &Log_formatTraceEntry(cur_entry)[7]); fflush(trace_destination); } }
static void Log_posttrace(int log_level, traceEntry* cur_entry) { if (((trace_output_level == -1) ? log_level >= trace_settings.trace_level : log_level >= trace_output_level)) { char* msg = NULL; if (trace_destination || trace_callback) msg = &Log_formatTraceEntry(cur_entry)[7]; Log_output(log_level, msg); } }