- some come cleanup in log.c (Bob Beers)
This commit is contained in:
parent
2f6651f97c
commit
22ab4e94b3
@ -1,5 +1,6 @@
|
|||||||
0.6.0
|
0.6.0
|
||||||
=====
|
=====
|
||||||
|
30-Jun-2007: - some come cleanup in log.c (Bob Beers)
|
||||||
22-Jun-2007: - fixed an error in "my via"detection when using the
|
22-Jun-2007: - fixed an error in "my via"detection when using the
|
||||||
"host_outbound" config directive
|
"host_outbound" config directive
|
||||||
08-Jun-2007: - Some cleanup in dejitter code
|
08-Jun-2007: - Some cleanup in dejitter code
|
||||||
|
|||||||
305
src/log.c
305
src/log.c
@ -41,6 +41,15 @@
|
|||||||
|
|
||||||
static char const ident[]="$Id$";
|
static char const ident[]="$Id$";
|
||||||
|
|
||||||
|
/* static functions */
|
||||||
|
static void output_to_stderr(const char *label, va_list ap, char *file,
|
||||||
|
int line, const char *format);
|
||||||
|
static void output_to_syslog(const char *label, int level, va_list ap,
|
||||||
|
char *file, int line, const char *format);
|
||||||
|
static void output_to_TCP(const char *label, va_list ap, char *file,
|
||||||
|
int line, const char *format);
|
||||||
|
|
||||||
|
|
||||||
/* module local variables */
|
/* module local variables */
|
||||||
static int log_to_stderr=0;
|
static int log_to_stderr=0;
|
||||||
static unsigned int debug_pattern=0;
|
static unsigned int debug_pattern=0;
|
||||||
@ -48,7 +57,7 @@ static unsigned int debug_pattern=0;
|
|||||||
static int debug_listen_port=0;
|
static int debug_listen_port=0;
|
||||||
static int debug_listen_fd=0;
|
static int debug_listen_fd=0;
|
||||||
static int debug_fd=0;
|
static int debug_fd=0;
|
||||||
static char outbuf[512];
|
|
||||||
/*
|
/*
|
||||||
* What shall I log to syslog?
|
* What shall I log to syslog?
|
||||||
* 0 - DEBUGs, INFOs, WARNINGs and ERRORs
|
* 0 - DEBUGs, INFOs, WARNINGs and ERRORs
|
||||||
@ -60,7 +69,7 @@ static char outbuf[512];
|
|||||||
static int silence_level=1;
|
static int silence_level=1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mutex for threat synchronization when writing log data
|
* Mutex for thread synchronization when writing log data
|
||||||
*
|
*
|
||||||
* use a 'fast' mutex for synchronizing - as these are portable...
|
* use a 'fast' mutex for synchronizing - as these are portable...
|
||||||
*/
|
*/
|
||||||
@ -212,244 +221,144 @@ void log_tcp_connect(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* for all the LOGGING routines:
|
static void output_to_stderr(const char *label, va_list ap, char *file,
|
||||||
They should figure out if we are running as a daemon, then write
|
int line, const char *format) {
|
||||||
their stuff to syslog or something like that
|
va_list ap_copy;
|
||||||
*/
|
time_t t;
|
||||||
|
struct tm *tim;
|
||||||
|
|
||||||
|
if (!log_to_stderr) return;
|
||||||
|
|
||||||
|
time(&t);
|
||||||
|
tim = localtime(&t);
|
||||||
|
fprintf(stderr, "%2.2i:%2.2i:%2.2i %s%s:%i ", tim->tm_hour,
|
||||||
|
tim->tm_min, tim->tm_sec, label, file, line);
|
||||||
|
va_copy(ap_copy, ap);
|
||||||
|
vfprintf(stderr, format, ap_copy);
|
||||||
|
va_end(ap_copy);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
fflush(stderr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void output_to_syslog(const char *label, int level, va_list ap,
|
||||||
|
char *file, int line, const char *format) {
|
||||||
|
va_list ap_copy;
|
||||||
|
char outbuf[256];
|
||||||
|
|
||||||
|
va_copy(ap_copy, ap);
|
||||||
|
vsnprintf(outbuf, sizeof(outbuf), format, ap_copy);
|
||||||
|
va_end(ap_copy);
|
||||||
|
syslog(LOG_USER|level, "%s:%i %s%s", file, line, label, outbuf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void output_to_TCP(const char *label, va_list ap, char *file,
|
||||||
|
int line, const char *format) {
|
||||||
|
va_list ap_copy;
|
||||||
|
time_t t;
|
||||||
|
struct tm *tim;
|
||||||
|
char outbuf[256];
|
||||||
|
|
||||||
|
if (debug_fd <= 0) return;
|
||||||
|
|
||||||
|
time(&t);
|
||||||
|
tim=localtime(&t);
|
||||||
|
snprintf(outbuf, sizeof(outbuf), "%2.2i:%2.2i:%2.2i %s%s:%i ",
|
||||||
|
tim->tm_hour, tim->tm_min, tim->tm_sec, label, file, line);
|
||||||
|
write(debug_fd, outbuf, strlen(outbuf));
|
||||||
|
va_copy(ap_copy, ap);
|
||||||
|
vsnprintf(outbuf, sizeof(outbuf), format, ap_copy);
|
||||||
|
va_end(ap_copy);
|
||||||
|
write(debug_fd, outbuf, strlen(outbuf));
|
||||||
|
snprintf(outbuf, sizeof(outbuf), "\n");
|
||||||
|
write(debug_fd, outbuf, strlen(outbuf));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void log_debug(unsigned int class, char *file, int line, const char *format, ...) {
|
void log_debug(unsigned int class, char *file, int line, const char *format, ...) {
|
||||||
va_list ap, ap_copy;
|
va_list ap;
|
||||||
time_t t;
|
|
||||||
struct tm *tim;
|
|
||||||
char string[128];
|
|
||||||
|
|
||||||
if ((debug_pattern & class) == 0) return;
|
if ((debug_pattern & class) == 0) return;
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
pthread_mutex_lock(&log_mutex);
|
pthread_mutex_lock(&log_mutex);
|
||||||
/*
|
|
||||||
* DEBUG output is either STDOUT or SYSLOG, but not both
|
|
||||||
*/
|
|
||||||
if (log_to_stderr) {
|
|
||||||
/* not running as daemon - log to STDERR */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
fprintf(stderr,"%2.2i:%2.2i:%2.2i %s:%i ", tim->tm_hour,
|
|
||||||
tim->tm_min, tim->tm_sec, file, line);
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vfprintf(stderr, format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
fprintf(stderr,"\n");
|
|
||||||
fflush(stderr);
|
|
||||||
} else if (silence_level < 1) {
|
|
||||||
/* running as daemon - log via SYSLOG facility */
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(string, sizeof(string), format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
syslog(LOG_DAEMON|LOG_DEBUG, "%s:%i %s", file, line, string);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Log to TCP
|
|
||||||
*/
|
|
||||||
if (debug_fd > 0) {
|
|
||||||
/* log to TCP socket */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"%2.2i:%2.2i:%2.2i %s:%i ",
|
|
||||||
tim->tm_hour, tim->tm_min, tim->tm_sec, file, line);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(outbuf, sizeof(outbuf) , format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"\n");
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
}
|
|
||||||
pthread_mutex_unlock(&log_mutex);
|
|
||||||
|
|
||||||
|
output_to_stderr("", ap, file, line, format);
|
||||||
|
|
||||||
|
if (!log_to_stderr && silence_level < 1) {
|
||||||
|
output_to_syslog("", LOG_DEBUG, ap, file, line, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
output_to_TCP("", ap, file, line, format);
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&log_mutex);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void log_error(char *file, int line, const char *format, ...) {
|
void log_error(char *file, int line, const char *format, ...) {
|
||||||
va_list ap, ap_copy;
|
va_list ap;
|
||||||
time_t t;
|
|
||||||
struct tm *tim;
|
|
||||||
char string[128];
|
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
pthread_mutex_lock(&log_mutex);
|
pthread_mutex_lock(&log_mutex);
|
||||||
/*
|
|
||||||
* INFO, WARN, ERROR output is always to syslog and if not daemonized
|
|
||||||
* st STDOUT as well.
|
|
||||||
*/
|
|
||||||
if (log_to_stderr) {
|
|
||||||
/* not running as daemon - log to STDERR */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
fprintf(stderr,"%2.2i:%2.2i:%2.2i ERROR:%s:%i ",tim->tm_hour,
|
|
||||||
tim->tm_min, tim->tm_sec, file, line);
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vfprintf(stderr, format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
fprintf(stderr,"\n");
|
|
||||||
fflush(stderr);
|
|
||||||
}
|
|
||||||
if (silence_level < 4) {
|
|
||||||
/* running as daemon - log via SYSLOG facility */
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(string, sizeof(string), format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
syslog(LOG_DAEMON|LOG_WARNING, "%s:%i ERROR:%s", file, line, string);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Log to TCP
|
|
||||||
*/
|
|
||||||
if (debug_fd > 0) {
|
|
||||||
/* log to TCP socket */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"%2.2i:%2.2i:%2.2i ERROR:%s:%i ",
|
|
||||||
tim->tm_hour, tim->tm_min, tim->tm_sec, file, line);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(outbuf, sizeof(outbuf) , format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"\n");
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
}
|
|
||||||
pthread_mutex_unlock(&log_mutex);
|
|
||||||
|
|
||||||
|
output_to_stderr("ERROR:", ap, file, line, format);
|
||||||
|
|
||||||
|
if (silence_level < 4) {
|
||||||
|
output_to_syslog("ERROR:", LOG_ERR, ap, file, line, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
output_to_TCP("ERROR:", ap, file, line, format);
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&log_mutex);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void log_warn(char *file, int line, const char *format, ...) {
|
void log_warn(char *file, int line, const char *format, ...) {
|
||||||
va_list ap, ap_copy;
|
va_list ap;
|
||||||
time_t t;
|
|
||||||
struct tm *tim;
|
|
||||||
char string[128];
|
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
pthread_mutex_lock(&log_mutex);
|
pthread_mutex_lock(&log_mutex);
|
||||||
/*
|
|
||||||
* INFO, WARN, ERROR output is always to syslog and if not daemonized
|
|
||||||
* st STDOUT as well.
|
|
||||||
*/
|
|
||||||
if (log_to_stderr) {
|
|
||||||
/* not running as daemon - log to STDERR */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
fprintf(stderr,"%2.2i:%2.2i:%2.2i WARNING:%s:%i ",tim->tm_hour,
|
|
||||||
tim->tm_min, tim->tm_sec,file,line);
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vfprintf(stderr, format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
fprintf(stderr,"\n");
|
|
||||||
fflush(stderr);
|
|
||||||
}
|
|
||||||
if (silence_level < 3) {
|
|
||||||
/* running as daemon - log via SYSLOG facility */
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(string, sizeof(string), format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
syslog(LOG_DAEMON|LOG_NOTICE, "%s:%i WARNING:%s", file, line, string);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Log to TCP
|
|
||||||
*/
|
|
||||||
if (debug_fd > 0) {
|
|
||||||
/* log to TCP socket */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"%2.2i:%2.2i:%2.2i WARNING:%s:%i ",
|
|
||||||
tim->tm_hour, tim->tm_min, tim->tm_sec, file, line);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(outbuf, sizeof(outbuf) , format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"\n");
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
}
|
|
||||||
pthread_mutex_unlock(&log_mutex);
|
|
||||||
|
|
||||||
|
output_to_stderr("WARNING:", ap, file, line, format);
|
||||||
|
|
||||||
|
if (silence_level < 3) {
|
||||||
|
output_to_syslog("WARNING:", LOG_NOTICE, ap, file, line, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
output_to_TCP("WARNING", ap, file, line, format);
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&log_mutex);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void log_info(char *file, int line, const char *format, ...) {
|
void log_info(char *file, int line, const char *format, ...) {
|
||||||
va_list ap, ap_copy;
|
va_list ap;
|
||||||
time_t t;
|
|
||||||
struct tm *tim;
|
|
||||||
char string[128];
|
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
|
|
||||||
pthread_mutex_lock(&log_mutex);
|
pthread_mutex_lock(&log_mutex);
|
||||||
/*
|
|
||||||
* INFO, WARN, ERROR output is always to syslog and if not daemonized
|
|
||||||
* st STDOUT as well.
|
|
||||||
*/
|
|
||||||
if (log_to_stderr) {
|
|
||||||
/* not running as daemon - log to STDERR */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
fprintf(stderr,"%2.2i:%2.2i:%2.2i INFO:%s:%i ",tim->tm_hour,
|
|
||||||
tim->tm_min, tim->tm_sec,file,line);
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vfprintf(stderr, format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
fprintf(stderr,"\n");
|
|
||||||
fflush(stderr);
|
|
||||||
}
|
|
||||||
if (silence_level < 2) {
|
|
||||||
/* running as daemon - log via SYSLOG facility */
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(string, sizeof(string), format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
syslog(LOG_DAEMON|LOG_NOTICE, "%s:%i INFO:%s", file, line, string);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Log to TCP
|
|
||||||
*/
|
|
||||||
if (debug_fd > 0) {
|
|
||||||
/* log to TCP socket */
|
|
||||||
time(&t);
|
|
||||||
tim=localtime(&t);
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"%2.2i:%2.2i:%2.2i INFO:%s:%i ",
|
|
||||||
tim->tm_hour, tim->tm_min, tim->tm_sec, file, line);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
va_copy(ap_copy, ap);
|
|
||||||
vsnprintf(outbuf, sizeof(outbuf) , format, ap_copy);
|
|
||||||
va_end(ap_copy);
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
snprintf(outbuf, sizeof(outbuf) ,"\n");
|
|
||||||
write(debug_fd, outbuf, strlen(outbuf));
|
|
||||||
}
|
|
||||||
pthread_mutex_unlock(&log_mutex);
|
|
||||||
|
|
||||||
|
output_to_stderr("INFO:", ap, file, line, format);
|
||||||
|
|
||||||
|
if (silence_level < 2) {
|
||||||
|
output_to_syslog("INFO:", LOG_NOTICE, ap, file, line, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
output_to_TCP("INFO", ap, file, line, format);
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&log_mutex);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void log_dump_buffer(unsigned int class, char *file, int line,
|
void log_dump_buffer(unsigned int class, char *file, int line,
|
||||||
char *buffer, int length) {
|
char *buffer, int length) {
|
||||||
int i, j;
|
int i, j;
|
||||||
char tmp[8], tmplin1[80], tmplin2[80];
|
char tmp[8], tmplin1[80], tmplin2[80];
|
||||||
|
char outbuf[256];
|
||||||
|
|
||||||
if ((debug_pattern & class) == 0) return;
|
if ((debug_pattern & class) == 0) return;
|
||||||
if ((!log_to_stderr) && (debug_fd <= 0)) return;
|
if ((!log_to_stderr) && (debug_fd <= 0)) return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user