/* va_list version of zlog. */ void vzlog (struct zlog *zl, int priority, const char *format, va_list *args) { /* If zlog is not specified, use default one. */ if (zl == NULL) zl = zlog_default; /* When zlog_default is also NULL, use stderr for logging. */ if (zl == NULL) { time_print (stderr); fprintf (stderr, "%s: ", "unknown"); vfprintf (stderr, format, args[ZLOG_NOLOG_INDEX]); fprintf (stderr, "\n"); fflush (stderr); /* In this case we return at here. */ return; } /* only log this information if it has not been masked out */ if ( priority > zl->maskpri ) return ; /* Syslog output */ if (zl->flags & ZLOG_SYSLOG) vsyslog (priority, format, args[ZLOG_SYSLOG_INDEX]); /* File output. */ if (zl->flags & ZLOG_FILE) { time_print (zl->fp); if (zl->record_priority) fprintf (zl->fp, "%s: ", zlog_priority[priority]); fprintf (zl->fp, "%s: ", zlog_proto_names[zl->protocol]); vfprintf (zl->fp, format, args[ZLOG_FILE_INDEX]); fprintf (zl->fp, "\n"); fflush (zl->fp); } /* stdout output. */ if (zl->flags & ZLOG_STDOUT) { time_print (stdout); if (zl->record_priority) fprintf (stdout, "%s: ", zlog_priority[priority]); fprintf (stdout, "%s: ", zlog_proto_names[zl->protocol]); vfprintf (stdout, format, args[ZLOG_STDOUT_INDEX]); fprintf (stdout, "\n"); fflush (stdout); } /* stderr output. */ if (zl->flags & ZLOG_STDERR) { time_print (stderr); if (zl->record_priority) fprintf (stderr, "%s: ", zlog_priority[priority]); fprintf (stderr, "%s: ", zlog_proto_names[zl->protocol]); vfprintf (stderr, format, args[ZLOG_STDERR_INDEX]); fprintf (stderr, "\n"); fflush (stderr); } /* Terminal monitor. */ vty_log (zlog_proto_names[zl->protocol], format, args[ZLOG_NOLOG_INDEX]); }
/* va_list version of zlog. */ static void vzlog(struct zlog *zl, int priority, const char *format, va_list args) { struct timestamp_control tsctl; tsctl.already_rendered = 0; /* If zlog is not specified, use default one. */ if (zl == NULL) zl = zlog_default; /* When zlog_default is also NULL, use stderr for logging. */ if (zl == NULL) { tsctl.precision = 0; time_print(stderr, &tsctl); fprintf(stderr, "%s: ", "unknown"); vfprintf(stderr, format, args); fprintf(stderr, "\n"); fflush(stderr); /* In this case we return at here. */ return; } tsctl.precision = zl->timestamp_precision; /* Syslog output */ if (priority <= zl->maxlvl[ZLOG_DEST_SYSLOG]) { va_list ac; va_copy(ac, args); vsyslog(priority | zlog_default->facility, format, ac); va_end(ac); } /* File output. */ if ((priority <= zl->maxlvl[ZLOG_DEST_FILE]) && zl->fp) { va_list ac; time_print(zl->fp, &tsctl); if (zl->record_priority) fprintf(zl->fp, "%s: ", zlog_priority[priority]); fprintf(zl->fp, "%s: ", zlog_proto_names[zl->protocol]); va_copy(ac, args); vfprintf(zl->fp, format, ac); va_end(ac); fprintf(zl->fp, "\n"); fflush(zl->fp); } /* stdout output. */ if (priority <= zl->maxlvl[ZLOG_DEST_STDOUT]) { va_list ac; time_print(stdout, &tsctl); if (zl->record_priority) fprintf(stdout, "%s: ", zlog_priority[priority]); fprintf(stdout, "%s: ", zlog_proto_names[zl->protocol]); va_copy(ac, args); vfprintf(stdout, format, ac); va_end(ac); fprintf(stdout, "\n"); fflush(stdout); } /* Terminal monitor. */ if (priority <= zl->maxlvl[ZLOG_DEST_MONITOR]) vty_log((zl->record_priority ? zlog_priority[priority] : NULL), zlog_proto_names[zl->protocol], format, &tsctl, args); }