| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #ifdef HAVE_CONFIG_H |
| #include <config.h> |
| #endif |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdarg.h> |
| #include <time.h> |
| #include <sys/time.h> |
| #include <syslog.h> |
| |
| #include "log.h" |
| |
| unsigned int log_level = LL_WARNING; |
| |
| int log_syslog = 0; |
| |
| void log_enable_syslog() |
| { |
| if (!log_syslog) { |
| openlog("usbmuxd", LOG_PID, 0); |
| log_syslog = 1; |
| } |
| } |
| |
| void log_disable_syslog() |
| { |
| if (log_syslog) { |
| closelog(); |
| } |
| } |
| |
| static int level_to_syslog_level(int level) |
| { |
| int result = level + LOG_CRIT; |
| if (result > LOG_DEBUG) { |
| result = LOG_DEBUG; |
| } |
| return result; |
| } |
| |
| void usbmuxd_log(enum loglevel level, const char *fmt, ...) |
| { |
| va_list ap; |
| char *fs; |
| struct timeval ts; |
| struct tm *tp; |
| |
| if(level > log_level) |
| return; |
| |
| gettimeofday(&ts, NULL); |
| tp = localtime(&ts.tv_sec); |
| |
| fs = malloc(20 + strlen(fmt)); |
| |
| if(log_syslog) { |
| sprintf(fs, "[%d] %s\n", level, fmt); |
| } else { |
| strftime(fs, 10, "[%H:%M:%S", tp); |
| sprintf(fs+9, ".%03d][%d] %s\n", (int)(ts.tv_usec / 1000), level, fmt); |
| } |
| |
| va_start(ap, fmt); |
| if (log_syslog) { |
| vsyslog(level_to_syslog_level(level), fs, ap); |
| } else { |
| vfprintf(stderr, fs, ap); |
| } |
| va_end(ap); |
| |
| free(fs); |
| } |