@ -305,6 +305,7 @@ static void init_logger_chain(void)
ast_mutex_unlock ( & loglock ) ;
ast_mutex_unlock ( & loglock ) ;
global_logmask = 0 ;
global_logmask = 0 ;
errno = 0 ;
/* close syslog */
/* close syslog */
closelog ( ) ;
closelog ( ) ;
@ -312,7 +313,10 @@ static void init_logger_chain(void)
/* If no config file, we're fine, set default options. */
/* If no config file, we're fine, set default options. */
if ( ! cfg ) {
if ( ! cfg ) {
fprintf ( stderr , " Unable to open logger.conf: %s \n " , strerror ( errno ) ) ;
if ( errno )
fprintf ( stderr , " Unable to open logger.conf: %s; default settings will be used. \n " , strerror ( errno ) ) ;
else
fprintf ( stderr , " Errors detected in logger.conf: see above; default settings will be used. \n " ) ;
chan = malloc ( sizeof ( struct logchannel ) ) ;
chan = malloc ( sizeof ( struct logchannel ) ) ;
memset ( chan , 0 , sizeof ( struct logchannel ) ) ;
memset ( chan , 0 , sizeof ( struct logchannel ) ) ;
chan - > type = LOGTYPE_CONSOLE ;
chan - > type = LOGTYPE_CONSOLE ;
@ -696,6 +700,21 @@ void ast_log(int level, const char *file, int line, const char *function, const
va_list ap ;
va_list ap ;
if ( ! logchannels )
{
/*
* we don ' t have the logger chain configured yet ,
* so just log to stdout
*/
if ( level ! = __LOG_VERBOSE ) {
va_start ( ap , fmt ) ;
vsnprintf ( buf , sizeof ( buf ) , fmt , ap ) ;
va_end ( ap ) ;
fputs ( buf , stdout ) ;
}
return ;
}
/* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug
/* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug
are non - zero ; LOG_DEBUG messages can still be displayed if option_debug
are non - zero ; LOG_DEBUG messages can still be displayed if option_debug
is zero , if option_verbose is non - zero ( this allows for ' level zero '
is zero , if option_verbose is non - zero ( this allows for ' level zero '
@ -733,72 +752,59 @@ void ast_log(int level, const char *file, int line, const char *function, const
return ;
return ;
}
}
if ( logchannels ) {
chan = logchannels ;
chan = logchannels ;
while ( chan & & ! chan - > disabled ) {
while ( chan & & ! chan - > disabled ) {
/* Check syslog channels */
/* Check syslog channels */
if ( chan - > type = = LOGTYPE_SYSLOG & & ( chan - > logmask & ( 1 < < level ) ) ) {
if ( chan - > type = = LOGTYPE_SYSLOG & & ( chan - > logmask & ( 1 < < level ) ) ) {
va_start ( ap , fmt ) ;
ast_log_vsyslog ( level , file , line , function , fmt , ap ) ;
va_end ( ap ) ;
/* Console channels */
} else if ( ( chan - > logmask & ( 1 < < level ) ) & & ( chan - > type = = LOGTYPE_CONSOLE ) ) {
char linestr [ 128 ] ;
char tmp1 [ 80 ] , tmp2 [ 80 ] , tmp3 [ 80 ] , tmp4 [ 80 ] ;
if ( level ! = __LOG_VERBOSE ) {
sprintf ( linestr , " %d " , line ) ;
snprintf ( buf , sizeof ( buf ) , option_timestamp ? " [%s] %s[%ld]: %s:%s %s: " : " %s %s[%ld]: %s:%s %s: " ,
date ,
term_color ( tmp1 , levels [ level ] , colors [ level ] , 0 , sizeof ( tmp1 ) ) ,
( long ) GETTID ( ) ,
term_color ( tmp2 , file , COLOR_BRWHITE , 0 , sizeof ( tmp2 ) ) ,
term_color ( tmp3 , linestr , COLOR_BRWHITE , 0 , sizeof ( tmp3 ) ) ,
term_color ( tmp4 , function , COLOR_BRWHITE , 0 , sizeof ( tmp4 ) ) ) ;
ast_console_puts ( buf ) ;
va_start ( ap , fmt ) ;
va_start ( ap , fmt ) ;
ast_log_vsyslog ( level , file , line , function , fmt , ap ) ;
vsnprintf( buf , sizeof ( buf ) , fmt , ap ) ;
va_end ( ap ) ;
va_end ( ap ) ;
/* Console channels */
ast_console_puts ( buf ) ;
} else if ( ( chan - > logmask & ( 1 < < level ) ) & & ( chan - > type = = LOGTYPE_CONSOLE ) ) {
}
char linestr [ 128 ] ;
/* File channels */
char tmp1 [ 80 ] , tmp2 [ 80 ] , tmp3 [ 80 ] , tmp4 [ 80 ] ;
} else if ( ( chan - > logmask & ( 1 < < level ) ) & & ( chan - > fileptr ) ) {
int res ;
if ( level ! = __LOG_VERBOSE ) {
snprintf ( buf , sizeof ( buf ) , option_timestamp ? " [%s] %s[%ld]: " : " %s %s[%ld] %s: " , date ,
sprintf ( linestr , " %d " , line ) ;
levels [ level ] , ( long ) GETTID ( ) , file ) ;
snprintf ( buf , sizeof ( buf ) , option_timestamp ? " [%s] %s[%ld]: %s:%s %s: " : " %s %s[%ld]: %s:%s %s: " ,
res = fprintf ( chan - > fileptr , buf ) ;
date ,
if ( res < = 0 & & buf [ 0 ] ! = ' \0 ' ) { /* Error, no characters printed */
term_color ( tmp1 , levels [ level ] , colors [ level ] , 0 , sizeof ( tmp1 ) ) ,
fprintf ( stderr , " **** Asterisk Logging Error: *********** \n " ) ;
( long ) GETTID ( ) ,
if ( errno = = ENOMEM | | errno = = ENOSPC ) {
term_color ( tmp2 , file , COLOR_BRWHITE , 0 , sizeof ( tmp2 ) ) ,
fprintf ( stderr , " Asterisk logging error: Out of disk space, can't log to log file %s \n " , chan - > filename ) ;
term_color ( tmp3 , linestr , COLOR_BRWHITE , 0 , sizeof ( tmp3 ) ) ,
} else
term_color ( tmp4 , function , COLOR_BRWHITE , 0 , sizeof ( tmp4 ) ) ) ;
fprintf ( stderr , " Logger Warning: Unable to write to log file '%s': %s (disabled) \n " , chan - > filename , strerror ( errno ) ) ;
manager_event ( EVENT_FLAG_SYSTEM , " LogChannel " , " Channel: %s \r \n Enabled: No \r \n Reason: %d - %s \r \n " , chan - > filename , errno , strerror ( errno ) ) ;
ast_console_puts ( buf ) ;
chan - > disabled = 1 ;
va_start ( ap , fmt ) ;
} else {
vsnprintf ( buf , sizeof ( buf ) , fmt , ap ) ;
/* No error message, continue printing */
va_end ( ap ) ;
va_start ( ap , fmt ) ;
ast_console_puts ( buf ) ;
vsnprintf ( buf , sizeof ( buf ) , fmt , ap ) ;
}
va_end ( ap ) ;
/* File channels */
term_strip ( buf , buf , sizeof ( buf ) ) ;
} else if ( ( chan - > logmask & ( 1 < < level ) ) & & ( chan - > fileptr ) ) {
fputs ( buf , chan - > fileptr ) ;
int res ;
fflush ( chan - > fileptr ) ;
snprintf ( buf , sizeof ( buf ) , option_timestamp ? " [%s] %s[%ld]: " : " %s %s[%ld] %s: " , date ,
levels [ level ] , ( long ) GETTID ( ) , file ) ;
res = fprintf ( chan - > fileptr , buf ) ;
if ( res < = 0 & & buf [ 0 ] ! = ' \0 ' ) { /* Error, no characters printed */
fprintf ( stderr , " **** Asterisk Logging Error: *********** \n " ) ;
if ( errno = = ENOMEM | | errno = = ENOSPC ) {
fprintf ( stderr , " Asterisk logging error: Out of disk space, can't log to log file %s \n " , chan - > filename ) ;
} else
fprintf ( stderr , " Logger Warning: Unable to write to log file '%s': %s (disabled) \n " , chan - > filename , strerror ( errno ) ) ;
manager_event ( EVENT_FLAG_SYSTEM , " LogChannel " , " Channel: %s \r \n Enabled: No \r \n Reason: %d - %s \r \n " , chan - > filename , errno , strerror ( errno ) ) ;
chan - > disabled = 1 ;
} else {
/* No error message, continue printing */
va_start ( ap , fmt ) ;
vsnprintf ( buf , sizeof ( buf ) , fmt , ap ) ;
va_end ( ap ) ;
term_strip ( buf , buf , sizeof ( buf ) ) ;
fputs ( buf , chan - > fileptr ) ;
fflush ( chan - > fileptr ) ;
}
}
}
chan = chan - > next ;
}
} else {
/*
* we don ' t have the logger chain configured yet ,
* so just log to stdout
*/
if ( level ! = __LOG_VERBOSE ) {
va_start ( ap , fmt ) ;
vsnprintf ( buf , sizeof ( buf ) , fmt , ap ) ;
va_end ( ap ) ;
fputs ( buf , stdout ) ;
}
}
chan = chan - > next ;
}
}
ast_mutex_unlock ( & loglock ) ;
ast_mutex_unlock ( & loglock ) ;