Exemplo n.º 1
0
void zlog_ex(const char *function, int line, int flags, const char *fmt, ...) /* {{{ */
{
    struct timeval tv;
    char buf[MAX_LINE_LENGTH];
    const size_t buf_size = MAX_LINE_LENGTH;
    va_list args;
    size_t len;
    int truncated = 0;
    int saved_errno;

    if ((flags & ZLOG_LEVEL_MASK) < zlog_level) {
        return;
    }

    saved_errno = errno;
    gettimeofday(&tv, 0);
    len = zlog_print_time(&tv, buf, buf_size);
    if (zlog_level == ZLOG_DEBUG) {
        len += snprintf(buf + len, buf_size - len, " %s: pid %d, %s(), line %d: ", level_names[flags & ZLOG_LEVEL_MASK], getpid(), function, line);
    } else {
        len += snprintf(buf + len, buf_size - len, " %s: ", level_names[flags & ZLOG_LEVEL_MASK]);
    }

    if (len > buf_size - 1) {
        truncated = 1;
    }

    if (!truncated) {
        va_start(args, fmt);
        len += vsnprintf(buf + len, buf_size - len, fmt, args);
        va_end(args);
        if (len >= buf_size) {
            truncated = 1;
        }
    }

    if (!truncated) {
        if (flags & ZLOG_HAVE_ERRNO) {
            len += snprintf(buf + len, buf_size - len, ": %s (%d)", strerror(saved_errno), saved_errno);
            if (len >= buf_size) {
                truncated = 1;
            }
        }
    }

    if (truncated) {
        memcpy(buf + buf_size - sizeof("..."), "...", sizeof("...") - 1);
        len = buf_size - 1;
    }

    buf[len++] = '\n';
    write(zlog_fd > -1 ? zlog_fd : STDERR_FILENO, buf, len);
    if (zlog_fd != STDERR_FILENO && zlog_fd > -1 && !launched && (flags & ZLOG_LEVEL_MASK) >= ZLOG_NOTICE) {
        write(STDERR_FILENO, buf, len);
    }
}
Exemplo n.º 2
0
void vzlog(const char *function, int line, int flags, const char *fmt, va_list args) /* {{{ */
{
	struct timeval tv;
	char buf[MAX_LINE_LENGTH];
	const size_t buf_size = MAX_LINE_LENGTH;
	size_t len = 0;
	int truncated = 0;
	int saved_errno;

	if (external_logger) {
		va_list ap;
		va_copy(ap, args);
		len = vsnprintf(buf, buf_size, fmt, ap);
		va_end(ap);
		if (len >= buf_size) {
			memcpy(buf + buf_size - sizeof("..."), "...", sizeof("...") - 1);
			len = buf_size - 1;
		}
		external_logger(flags & ZLOG_LEVEL_MASK, buf, len);
		len = 0;
		memset(buf, '\0', buf_size);
	}

	if ((flags & ZLOG_LEVEL_MASK) < zlog_level) {
		return;
	}

	saved_errno = errno;
#ifdef HAVE_SYSLOG_H
	if (zlog_fd == ZLOG_SYSLOG /* && !fpm_globals.is_child */) {
		len = 0;
		if (zlog_level == ZLOG_DEBUG) {
			len += snprintf(buf, buf_size, "[%s] %s(), line %d: ", level_names[flags & ZLOG_LEVEL_MASK], function, line);
		} else {
			len += snprintf(buf, buf_size, "[%s] ", level_names[flags & ZLOG_LEVEL_MASK]);
		}
	} else
#endif
	{
		if (!fpm_globals.is_child) {
			gettimeofday(&tv, 0);
			len = zlog_print_time(&tv, buf, buf_size);
		}
		if (zlog_level == ZLOG_DEBUG) {
			if (!fpm_globals.is_child) {
				len += snprintf(buf + len, buf_size - len, "%s: pid %d, %s(), line %d: ", level_names[flags & ZLOG_LEVEL_MASK], getpid(), function, line);
			} else {
				len += snprintf(buf + len, buf_size - len, "%s: %s(), line %d: ", level_names[flags & ZLOG_LEVEL_MASK], function, line);
			}
		} else {
			len += snprintf(buf + len, buf_size - len, "%s: ", level_names[flags & ZLOG_LEVEL_MASK]);
		}
	}

	if (len > buf_size - 1) {
		truncated = 1;
	}

	if (!truncated) {
		len += vsnprintf(buf + len, buf_size - len, fmt, args);
		if (len >= buf_size) {
			truncated = 1;
		}
	}

	if (!truncated) {
		if (flags & ZLOG_HAVE_ERRNO) {
			len += snprintf(buf + len, buf_size - len, ": %s (%d)", strerror(saved_errno), saved_errno);
			if (len >= buf_size) {
				truncated = 1;
			}
		}
	}

	if (truncated) {
		memcpy(buf + buf_size - sizeof("..."), "...", sizeof("...") - 1);
		len = buf_size - 1;
	}

#ifdef HAVE_SYSLOG_H
	if (zlog_fd == ZLOG_SYSLOG) {
		buf[len] = '\0';
		php_syslog(syslog_priorities[zlog_level], "%s", buf);
		buf[len++] = '\n';
	} else
#endif
	{
		buf[len++] = '\n';
		zend_quiet_write(zlog_fd > -1 ? zlog_fd : STDERR_FILENO, buf, len);
	}

	if (zlog_fd != STDERR_FILENO && zlog_fd != -1 && !launched && (flags & ZLOG_LEVEL_MASK) >= ZLOG_NOTICE) {
		zend_quiet_write(STDERR_FILENO, buf, len);
	}
}