From: Yann Ylavic Date: Fri, 8 Sep 2017 10:17:21 +0000 (+0000) Subject: Merge r1784318 from trunk: X-Git-Tag: 2.4.28~47 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2fd2f92e10d6eb8dc1c38686de307f9fb7c419c8;p=apache Merge r1784318 from trunk: Support use of optional "tag" in syslog entries. Streamline the patch. PR 60525. Submitted by: jim Reviewed by: rpluem, jim, mrumph git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1807707 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index d025033ea6..1570904225 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.4.28 + *) core/log: Support use of optional "tag" in syslog entries. + PR 60525. [Ben Rubson , Jim Jagielski] + *) mod_proxy: Fix ProxyAddHeaders merging. [Joe Orton] *) core: Disallow multiple Listen on the same IP:port when listener buckets diff --git a/STATUS b/STATUS index 5aa89e34b8..d1ce072c79 100644 --- a/STATUS +++ b/STATUS @@ -115,11 +115,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) core: Support use of optional "tag" in syslog entries. PR 60525. - trunk patch: http://svn.apache.org/r1784318 - 2.4.x patch: http://home.apache.org/~jim/patches/syslog-tag.patch - +1: rpluem, jim, mrumph - *) mod_proxy_wstunnel fix PR 61142 2.4.x patch: svn merge -c 1801594 ^/httpd/httpd/trunk . +1: jfclere, jim, covener diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml index 5af1ebd91d..b3c1fb3c20 100644 --- a/docs/manual/mod/core.xml +++ b/docs/manual/mod/core.xml @@ -1516,7 +1516,7 @@ ErrorDocument 404 /cgi-bin/bad_urls.pl ErrorLog Location where the server will log errors - ErrorLog file-path|syslog[:facility] + ErrorLog file-path|syslog[:[facility][:tag]] ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2) server configvirtual host @@ -1549,10 +1549,15 @@ ErrorLog "|/usr/local/bin/httpd_errors" facility 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.

+ entire server. Same rules apply for the syslog tag, which by default + uses the Apache binary name, httpd in most cases. You can + also override this by using the syslog::tag + syntax.

ErrorLog syslog:user +ErrorLog syslog:user:httpd.srv1 +ErrorLog syslog::httpd.srv2

Additional modules can provide their own ErrorLog providers. The syntax diff --git a/server/log.c b/server/log.c index bfec379d2a..22567a43af 100644 --- a/server/log.c +++ b/server/log.c @@ -398,16 +398,40 @@ static int open_error_log(server_rec *s, int is_main, apr_pool_t *p) #ifdef HAVE_SYSLOG else if (!strncasecmp(s->error_fname, "syslog", 6)) { if ((fname = strchr(s->error_fname, ':'))) { + /* s->error_fname could be [level]:[tag] (see #60525) */ + const char *tag; + apr_size_t flen; const TRANS *fac; fname++; - 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); - s->error_log = NULL; - return OK; + tag = ap_strchr_c(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); + s->error_log = NULL; + return OK; + } + } + /* Huh? Invalid level name? */ + ap_log_error(APLOG_MARK, APLOG_STARTUP, APR_EBADPATH, NULL, APLOGNO(10036) + "%s: could not open syslog error log %s.", + ap_server_argv0, fname); + return DONE; } } else {