Ejemplo n.º 1
0
Archivo: log.c Proyecto: hajuuk/R7000
/* 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]);
}
Ejemplo n.º 2
0
Archivo: log.c Proyecto: yubo/quagga
/* 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);
}