/* * level defines whether it gets displayed to the screen with printf. * (it always logs). * 0 = everything, even all the registers * 1 = prints syscall count * 2 = Just the reseed values * */ void output(unsigned char level, const char *fmt, ...) { va_list args; int n; FILE *handle; pid_t pid; char outputbuf[BUFSIZE]; char *prefix = NULL; char main_prefix[]="[main]"; char child_prefix[32]; if (logging == LOGGING_DISABLED && level >= quiet_level) return; /* prefix preparation */ pid = getpid(); if (pid == mainpid) prefix = main_prefix; else if (prefix == NULL) { unsigned int childno; childno = find_childno(pid); snprintf(child_prefix, sizeof(child_prefix), "[child%u:%u]", childno, pid); prefix = child_prefix; shm->children[childno]->logdirty = TRUE; } /* formatting output */ va_start(args, fmt); n = vsnprintf(outputbuf, sizeof(outputbuf), fmt, args); va_end(args); if (n < 0) { outputerr("## Something went wrong in output() [%d]\n", n); exit(EXIT_FAILURE); } /* stdout output if needed */ if (quiet_level >= level) { printf("%s %s", prefix, outputbuf); (void)fflush(stdout); } /* go on with file logs only if enabled */ if (logging == LOGGING_FILES) return; handle = find_logfile_handle(); if (!handle) return; strip_ansi(outputbuf); fprintf(handle, "%s %s", prefix, outputbuf); (void)fflush(handle); }
static FILE *robust_find_logfile_handle(void) { unsigned int j; FILE *handle = NULL; if ((logging == TRUE) && (logfiles_opened)) { handle = find_logfile_handle(); if (!handle) { outputerr("## child logfile handle was null logging to main!\n"); (void)fflush(stdout); for_each_pidslot(j) shm->logfiles[j] = mainlogfile; sleep(5); handle = find_logfile_handle(); } } return handle; }
static void output_rendered_buffer(char *buffer) { /* Output to stdout only if -q param is not specified */ if (quiet_level == MAX_LOGLEVEL) flushbuffer(buffer, stdout); /* Exit if should not continue at all. */ if (logging == TRUE) { FILE *log_handle; log_handle = find_logfile_handle(); if (log_handle != NULL) { strip_ansi(buffer); flushbuffer(buffer, log_handle); } } }
// TODO: combine the below with output() void output_rendered_buffer(char *buffer) { FILE *log_handle; /* Output to stdout only if -q param is not specified */ if (quiet_level == MAX_LOGLEVEL) { fprintf(stdout, "%s", buffer); fflush(stdout); } /* Exit if should not continue at all. */ if (logging == LOGGING_DISABLED) return; log_handle = find_logfile_handle(); if (log_handle != NULL) { strip_ansi(buffer); fprintf(log_handle, "%s", buffer); fflush(log_handle); } }