log.c -- 看文档,还不如看代码来的简单。[7]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 liangbowen 的 blog

        }
        else if (status < 100000 + apr_os_start_syserr) {
            len += apr_snprintf(errstr + len, max_string_len - len,
                                "(os %d)", status - apr_os_start_syserr);
        }
        else {
            len += apr_snprintf(errstr + len, max_string_len - len,
                                "(os 0x%08x)", status - apr_os_start_syserr);
        }
        apr_strerror(status, errstr + len, max_string_len - len);
        len += strlen(errstr + len);
        if (max_string_len - len > 2) {
            errstr[len++] = ':';
            errstr[len++] = ' ';
            errstr[len] = '\0';
        }
    }

    errstrlen = len;
#ifndef ap_unsafe_error_log_unescaped
    if (apr_vsnprintf(scratch, max_string_len - len, fmt, args)) {
        len += ap_escape_errorlog_item(errstr + len, scratch,
                                       max_string_len - len);
    }
#else
    len += apr_vsnprintf(errstr + len, max_string_len - len, fmt, args);
#endif

    if (   r && (referer = apr_table_get(r->headers_in, "referer"))
#ifndef ap_unsafe_error_log_unescaped
        && ap_escape_errorlog_item(scratch, referer, max_string_len - len)
#endif
        ) {
        len += apr_snprintf(errstr + len, max_string_len - len,
                            ", referer: %s",
#ifndef ap_unsafe_error_log_unescaped
                            scratch
#else
                            referer
#endif
                            );
    }

    /* null if we are logging to syslog */
    if (logf) {
        /* truncate for the terminator (as apr_snprintf does) */
        if (len > max_string_len - sizeof(apr_eol_str)) {
            len = max_string_len - sizeof(apr_eol_str);
        }
        strcpy(errstr + len, apr_eol_str);
        apr_file_puts(errstr, logf);
        apr_file_flush(logf);
    }
#ifdef have_syslog
    else {
        syslog(level_and_mask, "%s", errstr);
    }
#endif

    ap_run_error_log(file, line, level, status, s, r, pool, errstr + errstrlen);
}

ap_declare(void) ap_log_error(const char *file, int line, int level,
                              apr_status_t status, const server_rec *s,
                              const char *fmt, ...)
{

本文关键:log.c -- 看文档,还不如看代码来的简单。
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top