35#define APR_WANT_STRFUNC
59#include <sys/syscall.h>
64#undef APLOG_MODULE_INDEX
65#define APLOG_MODULE_INDEX AP_CORE_MODULE_INDEX
67#ifndef DEFAULT_LOG_TID
68#define DEFAULT_LOG_TID NULL
191#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
264 "%s: could not open error log file %s.",
297 "unable to replace stderr with error log file");
303 const char *description)
372 if (*
s->error_fname ==
'|') {
375 fname =
s->error_fname + 1;
396 "Couldn't start ErrorLog process '%s'.",
405 else if (
strcmp(
s->error_fname,
"syslog") == 0
406 ||
strncmp(
s->error_fname,
"syslog:", 7) == 0) {
439 "%s: could not open syslog error log %s.",
455 "%s: Invalid error log path %s.",
463 "%s: could not open error log file %s.",
514 "unable to replace stderr with error_log");
544#define NULL_DEVICE "nul"
546#define NULL_DEVICE "/dev/null"
555 if (
virt->error_fname) {
583 if (
s->error_log !=
NULL) {
603 info->r->useragent_addr ?
info->r->useragent_addr->port : 0);
606 info->c->client_addr ?
info->c->client_addr->port : 0);
616 info->c->local_addr->port);
634#if defined(HAVE_GETTID) || defined(HAVE_SYS_GETTID)
664 if (
arg[0] ==
'u' && !
arg[1]) {
719 else if (
info->rmain) {
748#if defined(_OSD_POSIX) || defined(WIN32) || defined(__MVS__)
763 if (
e !=
NULL &&
e[1] !=
'\0') {
765 e = &tmp[strlen(tmp)-1];
833#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
892 if (
sizeof(
pid_t) > 2) {
920 encoded[
len - 2] =
'\0';
975#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
979 if (!
info->using_syslog && !
info->startup) {
986 if (!
info->startup) {
1029 info->r->connection->sbh ?
"[client %s:%d] " :
"[remote %s:%d] ",
1030 info->r->useragent_ip,
1031 info->r->useragent_addr ?
info->r->useragent_addr->port : 0);
1035 info->c->sbh ?
"[client %s:%d] " :
"[remote %s:%d] ",
1037 info->c->client_addr ?
info->c->client_addr->port : 0);
1042#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
1068#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
1078 for (
i = 0;
i <
fmt->nelts; ++
i) {
1092#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
1106 else if (
info->level != -1 && (
int)
item->min_loglevel >
info->level) {
1174 int line_number = 0;
1215 logf =
s->error_log;
1228 if (
s->module_config) {
1230 if (
c && !
c->log_id) {
1232 if (
sconf->error_log_conn &&
sconf->error_log_conn->nelts > 0)
1243 if (
sconf->error_log_req &&
sconf->error_log_req->nelts > 0)
1275 if (line_number == 0) {
1285 if (line_number ==
sconf->error_log_conn->nelts) {
1293 if (line_number == 0) {
1303 if (line_number ==
sconf->error_log_req->nelts) {
1314 info.module_index = module_index;
1364 const char *
fmt, ...)
1388 const char *
fmt, ...)
1430 const char *
fmt, ...)
1452#define BYTES_LOGGED_PER_LINE 16
1453#define LOG_BYTES_BUFFER_SIZE (BYTES_LOGGED_PER_LINE * 3 + 2)
1457 const unsigned char *
data = (
const unsigned char *)
vdata;
1458 unsigned char *
chars;
1480 if ((
c >> 4) >= 10) {
1481 *
hex =
'a' + ((
c >> 4) - 10);
1484 *
hex =
'0' + (
c >> 4);
1487 if ((
c & 0x0F) >= 10) {
1488 *(
hex + 1) =
'a' + ((
c & 0x0F) - 10);
1491 *(
hex + 1) =
'0' + (
c & 0x0F);
1537 int module_index,
int level,
1547 int module_index,
int level,
1557 int module_index,
int level,
1585 for (
i = 0;
i < process->
argc;
i++) {
1592 for (
i = 0;
i < process->
argc;
i++) {
1594 if ((
i+1)< process->
argc) {
1599 "Command line: '%s'",
result);
1606 "Using SO_REUSEPORT: %s (%d)",
1620 "failed to remove PID file %s",
fname);
1664 "pid file %s overwritten -- Unclean "
1665 "shutdown of previous Apache run?",
1676 "%s: could not log pid to file %s",
1689 "%s: Failed creating pid file %s",
1750 "[%s] file %s, line %d, assertion \"%s\" failed",
1762#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
1787 "piped_log_spawn: unable to setup child process '%s'",
1806 pl->write_fd,
pl->p);
1812 "unable to start piped log program '%s'",
1837 "can't query MPM state; not restarting "
1838 "piped log program '%s'",
1843 "piped log program '%s' failed unexpectedly",
1849 "piped_log_maintenance: unable to respawn '%s'",
1895 const char *program,
1904 pl->cmdtype = cmdtype;
1932 const char *program,
1942 "Couldn't start piped log process '%s'.",
1943 (program ==
NULL) ?
"NULL" : program);
1959 const char *program)
1968 if (*program ==
'|')
1970 if (*program ==
'$') {
1985 const char *
err =
"Log level keyword must be one of emerg/alert/crit/error/"
1986 "warn/notice/info/debug/trace1/.../trace8";
Symbol export macros and hook functions.
#define AP_IMPLEMENT_HOOK_VOID(name, args_decl, args_use)
#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret, name, args_decl, args_use, decline)
Apache Listeners Library.
Apache Multi-Processing Module library.
const char apr_size_t len
APR-UTIL Base64 Encoding.
APR Miscellaneous library routines.
APR general purpose library routines.
APR Portability Routines.
APR Thread and Process Library.
APR Standard Headers Support.
static apr_pool_t * pconf
const char * ap_parse_log_level(const char *str, int *val)
apr_status_t ap_pool_cleanup_set_null(void *data)
#define ap_get_request_module_loglevel(r, i)
#define ap_get_server_module_loglevel(s, i)
#define ap_get_conn_server_module_loglevel(c, s, i)
char * ap_server_root_relative(apr_pool_t *p, const char *fname)
const char * ap_find_module_short_name(int module_index)
void ap_register_log_hooks(apr_pool_t *p)
#define AP_ERRORLOG_FLAG_MESSAGE
#define AP_ERRORLOG_FLAG_NULL_AS_HYPHEN
void ap_run_error_log(const ap_errorlog_info *info, const char *errstr)
const char * ap_get_server_name(request_rec *r)
#define ap_get_core_module_config(v)
#define AP_ERRORLOG_FLAG_FIELD_SEP
void ap_register_errorlog_handler(apr_pool_t *p, char *tag, ap_errorlog_handler_fn_t *handler, int flags)
#define AP_ERRORLOG_FLAG_REQUIRED
int ap_num_listen_buckets
void ap_log_rdata_(const char *file, int line, int module_index, int level, const request_rec *r, const char *label, const void *data, apr_size_t len, unsigned int flags)
apr_status_t ap_replace_stderr_log(apr_pool_t *p, const char *fname)
#define AP_LOG_DATA_SHOW_OFFSET
void ap_log_data_(const char *file, int line, int module_index, int level, const server_rec *s, const char *label, const void *data, apr_size_t len, unsigned int flags)
void ap_hook_generate_log_id(ap_HOOK_generate_log_id_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_close_piped_log(piped_log *pl)
apr_file_t * ap_piped_log_write_fd(piped_log *pl)
apr_status_t ap_read_pid(apr_pool_t *p, const char *filename, pid_t *mypid)
int ap_run_generate_log_id(const conn_rec *c, const request_rec *r, const char **id)
piped_log * ap_open_piped_log_ex(apr_pool_t *p, const char *program, apr_cmdtype_e cmdtype)
apr_file_t * ap_piped_log_read_fd(piped_log *pl)
piped_log * ap_open_piped_log(apr_pool_t *p, const char *program)
void ap_remove_pid(apr_pool_t *p, const char *rel_fname)
void ap_open_stderr_log(apr_pool_t *p)
void ap_error_log2stderr(server_rec *s)
void ap_logs_child_init(apr_pool_t *p, server_rec *s)
int ap_open_logs(apr_pool_t *pconf, apr_pool_t *p, apr_pool_t *ptemp, server_rec *s_main)
void ap_log_mpm_common(server_rec *s)
void ap_log_pid(apr_pool_t *p, const char *filename)
void ap_log_cdata_(const char *file, int line, int module_index, int level, const conn_rec *c, const char *label, const void *data, apr_size_t len, unsigned int flags)
void ap_log_csdata_(const char *file, int line, int module_index, int level, const conn_rec *c, const server_rec *s, const char *label, const void *data, apr_size_t len, unsigned int flags)
void ap_log_command_line(apr_pool_t *plog, server_rec *s)
const char * ap_server_argv0
const char * ap_server_root
server_rec * ap_server_conf
const unsigned char * buf
apr_status_t ap_explode_recent_localtime(apr_time_exp_t *tm, apr_time_t t)
#define AP_CTIME_OPTION_GMTOFF
apr_status_t ap_recent_ctime_ex(char *date_str, apr_time_t t, int option, int *len)
#define AP_CTIME_OPTION_USEC
#define AP_CTIME_OPTION_NONE
#define AP_CTIME_OPTION_COMPACT
#define APR_OC_REASON_RESTART
#define APR_OC_REASON_LOST
#define APR_OC_REASON_UNREGISTER
#define APR_OC_REASON_DEATH
#define APR_OC_REASON_UNWRITABLE
apr_pool_t apr_dbd_t const char const char * label
const char apr_ssize_t int flags
#define APR_HOOK_LINK(name)
#define APR_HOOK_STRUCT(members)
#define APR_HOOK_REALLY_LAST
#define ap_strrchr_c(s, c)
void ap_log_assert(const char *szExp, const char *szFile, int nLine)
#define ap_strchr_c(s, c)
#define AP_DEBUG_ASSERT(exp)
#define ap_escape_html(p, s)
apr_size_t ap_escape_errorlog_item(char *dest, const char *source, apr_size_t buflen)
const char int apr_pool_t * pool
#define APR_OS_START_EAIERR
#define APR_OS_START_SYSERR
apr_int32_t apr_fileperms_t
const char apr_fileperms_t perms
void apr_size_t apr_size_t * bytes_read
const char apr_file_t * file
#define APR_FOPEN_TRUNCATE
apr_array_header_t ** result
int strcasecmp(const char *a, const char *b)
int strncasecmp(const char *a, const char *b, size_t n)
apr_vformatter_buff_t const char * fmt
apr_vformatter_buff_t * c
const char apr_uint32_t * id
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
apr_size_t const char * filename
apr_int32_t apr_int32_t apr_int32_t err
const char const char *const * args
apr_status_t ap_mpm_query(int query_code, int *result)
#define AP_MPMQ_MPM_STATE
#define AP_MPMQ_IS_THREADED
#define AP_MPMQ_NOT_SUPPORTED
static int do_errorlog_default(const ap_errorlog_info *info, char *buf, int buflen, int *errstr_start, int *errstr_end, const char *errstr_fmt, va_list args)
static int log_log_id(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static apr_status_t piped_log_cleanup(void *data)
static apr_file_t * stderr_log
static int log_local_address(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static void log_error_va_glue(const char *file, int line, int module_index, int level, apr_status_t status, const server_rec *s, const conn_rec *c, const request_rec *r, apr_pool_t *pool, const char *fmt,...)
static void log_error_core(const char *file, int line, int module_index, int level, apr_status_t status, const server_rec *s, const conn_rec *c, const request_rec *r, apr_pool_t *pool, const char *fmt, va_list args)
static int log_header(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
#define BYTES_LOGGED_PER_LINE
static int open_error_log(server_rec *s, int is_main, apr_pool_t *p)
static int log_file_line(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static read_handle_t * read_handles
static void fmt_data(unsigned char *buf, const void *vdata, apr_size_t len, apr_size_t *off)
static int log_apr_status(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_keepalives(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_module_name(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_note(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int do_errorlog_format(apr_array_header_t *fmt, ap_errorlog_info *info, char *buf, int buflen, int *errstr_start, int *errstr_end, const char *err_fmt, va_list args)
static int core_generate_log_id(const conn_rec *c, const request_rec *r, const char **idstring)
static int log_loglevel(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_remote_address(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_tid(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_pid(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_virtual_host(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
#define LOG_BYTES_BUFFER_SIZE
void ap_log_perror_(const char *file, int line, int module_index, int level, apr_status_t status, apr_pool_t *p, const char *fmt,...)
void ap_log_cserror_(const char *file, int line, int module_index, int level, apr_status_t status, const conn_rec *c, const server_rec *s, const char *fmt,...)
void ap_log_cerror_(const char *file, int line, int module_index, int level, apr_status_t status, const conn_rec *c, const char *fmt,...)
static int log_server_name(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_env_var(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static void close_handle_in_child(apr_pool_t *p, apr_file_t *f)
static int cpystrn(char *buf, const char *arg, int buflen)
void ap_log_error_(const char *file, int line, int module_index, int level, apr_status_t status, const server_rec *s, const char *fmt,...)
void ap_log_rerror_(const char *file, int line, int module_index, int level, apr_status_t status, const request_rec *r, const char *fmt,...)
static void log_data_core(const char *file, int line, int module_index, int level, const server_rec *s, const conn_rec *c, const request_rec *r, const char *label, const void *data, apr_size_t len, unsigned int flags)
static int log_child(apr_pool_t *p, const char *progname, apr_file_t **fpin, apr_cmdtype_e cmdtype, int dummy_stderr)
static void add_log_id(const conn_rec *c, const request_rec *r)
static apr_pool_t * stderr_pool
static const TRANS priorities[]
static int log_ctime(const ap_errorlog_info *info, const char *arg, char *buf, int buflen)
static int log_table_entry(const apr_table_t *table, const char *name, char *buf, int buflen)
static void log_child_errfn(apr_pool_t *pool, apr_status_t err, const char *description)
static void write_logline(char *errstr, apr_size_t len, apr_file_t *logf, int level)
static const char * log_format(cmd_parms *cmd, void *dummy, const char *fmt, const char *name)
static int generate_log_id(const conn_rec *c, const request_rec *r, const char **id)
apr_os_thread_t apr_os_thread_current()
Structure to store things which are per connection.
The piped logging structure.
A structure that represents one process.
struct read_handle_t * next
A structure that represents the current request.
A structure to store information for each virtual server.
struct ap_conf_vector_t * module_config
apr_status_t apr_strftime(char *s, apr_size_t *retsize, apr_size_t max, const char *format, apr_time_exp_t *xt)
apr_status_t apr_ctime(char *date_str, apr_time_t t)
Apache date-time handling functions.
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray