+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#include <stdarg.h>
};
int trace_level = 1;
+int logfile_fd = STDERR_FILENO;
static const char *assign_color(int color)
{
time_t t = time(0);
char time[32];
char trace[1024];
+ char all_trace[1538];
const char *color_str = assign_color(color);
+ int ret;
if (l > trace_level)
return;
strftime(time, sizeof(time), "%d.%m.%Y %T", localtime(&t));
- fprintf(stderr, "%s%s [%5d.%d] %s:%d %s %s",
+ ret = snprintf(all_trace, sizeof(all_trace),
+ "%s%s [%5d.%d] %s:%d %s %s",
color_str, time,
getpid(), get_parent_count(),
file, line, normal_color, trace);
- fflush(stderr);
+
+ ret = write(logfile_fd, all_trace, ret);
+ /*
+ * If write failed, well, not much point in trying to print a
+ * trace about it.. So we just ignore the return value
+ */
+}
+
+int open_log_file(const char *logfile)
+{
+ int fd;
+
+ pr_info("Switching logging to file: %s\n", logfile);
+
+ fd = open(logfile, O_WRONLY | O_CREAT | O_APPEND, 0666);
+ if (fd < 0) {
+ pr_err("Failed to open logfile %s: %m\n", logfile);
+ return fd;
+ }
+
+ if (logfile_fd != STDERR_FILENO)
+ close(logfile_fd);
+ logfile_fd = fd;
+
+ pr_info("Opened file %s for logging\n", logfile);
+
+ return 0;
}