From 2fd2f92e10d6eb8dc1c38686de307f9fb7c419c8 Mon Sep 17 00:00:00 2001
From: Yann Ylavic
Date: Fri, 8 Sep 2017 10:17:21 +0000
Subject: [PATCH] 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
---
CHANGES | 3 +++
STATUS | 5 -----
docs/manual/mod/core.xml | 9 +++++++--
server/log.c | 36 ++++++++++++++++++++++++++++++------
4 files changed, 40 insertions(+), 13 deletions(-)
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 {
--
2.40.0