-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mod_syslog: Support use of optional "tag" in syslog entries.
+ PR 60525. [Ben Rubson <ben.rubson gmail.com>, Jim Jagielski]
+
*) MPMs unix: Place signals handlers and helpers out of DSOs to avoid
a possible crash if a signal is caught during (graceful) restart.
PR 60487. [Yann Ylavic]
<directivesynopsis>
<name>ErrorLog</name>
<description>Location where the server will log errors</description>
-<syntax> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</syntax>
+<syntax> ErrorLog <var>file-path</var>|syslog[:[<var>facility</var>][:<var>tag</var>]]</syntax>
<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
syntax where <var>facility</var> can be one of the names usually documented in
syslog(1). The facility is effectively global, and if it is changed
in individual virtual hosts, the final facility specified affects the
- entire server.</p>
+ entire server. Same rules apply for the syslog tag, which by default
+ uses the Apache binary name, <code>httpd</code> in most cases. You can
+ also override this by using the <code>syslog::<var>tag</var></code>
+ syntax.</p>
<highlight language="config">
ErrorLog syslog:user
+ErrorLog syslog:user:httpd.srv1
+ErrorLog syslog::httpd.srv2
</highlight>
<p>Additional modules can provide their own ErrorLog providers. The syntax
openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID, LOG_LOCAL7);
}
else {
+ /* s->error_fname could be [level]:[tag] (see #60525) */
+ const char *tag;
+ apr_size_t flen;
const TRANS *fac;
- for (fac = facilities; fac->t_name; fac++) {
- if (!strcasecmp(fname, fac->t_name)) {
- openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID,
- fac->t_val);
- return success;
+ tag = strchr(fname, ':');
+ if (tag) {
+ flen = tag - fname;
+ tag++;
+ if (*tag == '\0') {
+ tag = ap_server_argv0;
}
+ } else {
+ flen = strlen(fname);
+ tag = ap_server_argv0;
+ }
+ if (flen == 0) {
+ /* Was something like syslog::foobar */
+ openlog(tag, LOG_NDELAY|LOG_CONS|LOG_PID, LOG_LOCAL7);
+ } else {
+ for (fac = facilities; fac->t_name; fac++) {
+ if (!strncasecmp(fname, fac->t_name, flen)) {
+ openlog(tag, LOG_NDELAY|LOG_CONS|LOG_PID,
+ fac->t_val);
+ return success;
+ }
+ }
+ /* Huh? Invalid level name? */
+ return NULL;
}
}
-
return success;
}