- while(*w && (*w < 33))
- w++;
- if (!strcasecmp(w, "error"))
- res |= (1 << __LOG_ERROR);
- else if (!strcasecmp(w, "warning"))
- res |= (1 << __LOG_WARNING);
- else if (!strcasecmp(w, "notice"))
- res |= (1 << __LOG_NOTICE);
- else if (!strcasecmp(w, "event"))
- res |= (1 << __LOG_EVENT);
- else if (!strcasecmp(w, "debug"))
- res |= (1 << __LOG_DEBUG);
- else if (!strcasecmp(w, "verbose"))
- res |= (1 << __LOG_VERBOSE);
- else {
- fprintf(stderr, "Logfile Warning: Unknown keyword '%s' at line %d of logger.conf\n", w, lineno);
- }
- w = strsep(&stringp, ",");
+ while(*w && (*w < 33))
+ w++;
+ if (!strcasecmp(w, "error"))
+ res |= (1 << __LOG_ERROR);
+ else if (!strcasecmp(w, "warning"))
+ res |= (1 << __LOG_WARNING);
+ else if (!strcasecmp(w, "notice"))
+ res |= (1 << __LOG_NOTICE);
+ else if (!strcasecmp(w, "event"))
+ res |= (1 << __LOG_EVENT);
+ else if (!strcasecmp(w, "debug"))
+ res |= (1 << __LOG_DEBUG);
+ else if (!strcasecmp(w, "verbose"))
+ res |= (1 << __LOG_VERBOSE);
+ else {
+ fprintf(stderr, "Logfile Warning: Unknown keyword '%s' at line %d of logger.conf\n", w, lineno);
+ }
+ w = strsep(&stringp, ",");
- chan->facility = -1;
- if (!strcasecmp(facility, "kern"))
- chan->facility = LOG_KERN;
- else if (!strcasecmp(facility, "USER"))
- chan->facility = LOG_USER;
- else if (!strcasecmp(facility, "MAIL"))
- chan->facility = LOG_MAIL;
- else if (!strcasecmp(facility, "DAEMON"))
- chan->facility = LOG_DAEMON;
- else if (!strcasecmp(facility, "AUTH"))
- chan->facility = LOG_AUTH;
- else if (!strcasecmp(facility, "SYSLOG"))
- chan->facility = LOG_SYSLOG;
- else if (!strcasecmp(facility, "LPR"))
- chan->facility = LOG_LPR;
- else if (!strcasecmp(facility, "NEWS"))
- chan->facility = LOG_NEWS;
- else if (!strcasecmp(facility, "UUCP"))
- chan->facility = LOG_UUCP;
- else if (!strcasecmp(facility, "CRON"))
- chan->facility = LOG_CRON;
- else if (!strcasecmp(facility, "LOCAL0"))
- chan->facility = LOG_LOCAL0;
- else if (!strcasecmp(facility, "LOCAL1"))
- chan->facility = LOG_LOCAL1;
- else if (!strcasecmp(facility, "LOCAL2"))
- chan->facility = LOG_LOCAL2;
- else if (!strcasecmp(facility, "LOCAL3"))
- chan->facility = LOG_LOCAL3;
- else if (!strcasecmp(facility, "LOCAL4"))
- chan->facility = LOG_LOCAL4;
- else if (!strcasecmp(facility, "LOCAL5"))
- chan->facility = LOG_LOCAL5;
- else if (!strcasecmp(facility, "LOCAL6"))
- chan->facility = LOG_LOCAL6;
- else if (!strcasecmp(facility, "LOCAL7"))
- chan->facility = LOG_LOCAL7;
-#endif
-
- if (0 > chan->facility) {
- fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n");
- free(chan);
- return NULL;
- }
+ chan->facility = -1;
+ if (!strcasecmp(facility, "kern"))
+ chan->facility = LOG_KERN;
+ else if (!strcasecmp(facility, "USER"))
+ chan->facility = LOG_USER;
+ else if (!strcasecmp(facility, "MAIL"))
+ chan->facility = LOG_MAIL;
+ else if (!strcasecmp(facility, "DAEMON"))
+ chan->facility = LOG_DAEMON;
+ else if (!strcasecmp(facility, "AUTH"))
+ chan->facility = LOG_AUTH;
+ else if (!strcasecmp(facility, "SYSLOG"))
+ chan->facility = LOG_SYSLOG;
+ else if (!strcasecmp(facility, "LPR"))
+ chan->facility = LOG_LPR;
+ else if (!strcasecmp(facility, "NEWS"))
+ chan->facility = LOG_NEWS;
+ else if (!strcasecmp(facility, "UUCP"))
+ chan->facility = LOG_UUCP;
+ else if (!strcasecmp(facility, "CRON"))
+ chan->facility = LOG_CRON;
+ else if (!strcasecmp(facility, "LOCAL0"))
+ chan->facility = LOG_LOCAL0;
+ else if (!strcasecmp(facility, "LOCAL1"))
+ chan->facility = LOG_LOCAL1;
+ else if (!strcasecmp(facility, "LOCAL2"))
+ chan->facility = LOG_LOCAL2;
+ else if (!strcasecmp(facility, "LOCAL3"))
+ chan->facility = LOG_LOCAL3;
+ else if (!strcasecmp(facility, "LOCAL4"))
+ chan->facility = LOG_LOCAL4;
+ else if (!strcasecmp(facility, "LOCAL5"))
+ chan->facility = LOG_LOCAL5;
+ else if (!strcasecmp(facility, "LOCAL6"))
+ chan->facility = LOG_LOCAL6;
+ else if (!strcasecmp(facility, "LOCAL7"))
+ chan->facility = LOG_LOCAL7;
+#endif /* Solaris */
+
+ if (0 > chan->facility) {
+ fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n");
+ free(chan);
+ return NULL;
+ }
+/*--- handle_logger_show_channels: CLI command to show logging system
+ configuration */
+static int handle_logger_show_channels(int fd, int argc, char *argv[])
+{
+#define FORMATL "%-35.35s %-8.8s %-9.9s "
+ struct logchannel *chan;
+
+ ast_mutex_lock(&loglock);
+
+ chan = logchannels;
+ ast_cli(fd,FORMATL, "Channel", "Type", "Status");
+ ast_cli(fd, "Configuration\n");
+ ast_cli(fd,FORMATL, "-------", "----", "------");
+ ast_cli(fd, "-------------\n");
+ while (chan) {
+ ast_cli(fd, FORMATL, chan->filename, chan->type==LOGTYPE_CONSOLE ? "Console" : (chan->type==LOGTYPE_SYSLOG ? "Syslog" : "File"),
+ chan->disabled ? "Disabled" : "Enabled");
+ ast_cli(fd, " - ");
+ if (chan->logmask & (1 << __LOG_DEBUG))
+ ast_cli(fd, "Debug ");
+ if (chan->logmask & (1 << __LOG_VERBOSE))
+ ast_cli(fd, "Verbose ");
+ if (chan->logmask & (1 << __LOG_WARNING))
+ ast_cli(fd, "Warning ");
+ if (chan->logmask & (1 << __LOG_NOTICE))
+ ast_cli(fd, "Notice ");
+ if (chan->logmask & (1 << __LOG_ERROR))
+ ast_cli(fd, "Error ");
+ if (chan->logmask & (1 << __LOG_EVENT))
+ ast_cli(fd, "Event ");
+ ast_cli(fd, "\n");
+ chan = chan->next;
+ }
+ ast_cli(fd, "\n");
+
+ ast_mutex_unlock(&loglock);
+
+ return RESULT_SUCCESS;
+}
+
- snprintf(buf, sizeof(buf), option_timestamp ? "[%s] %s[%ld]: " : "%s %s[%ld]: ", date,
- levels[level], (long)GETTID());
- fprintf(chan->fileptr, buf);
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
- fputs(buf, chan->fileptr);
- fflush(chan->fileptr);
+ int res;
+ 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\nEnabled: No\r\nReason: %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);
+ fputs(buf, chan->fileptr);
+ fflush(chan->fileptr);
+ }