]> granicus.if.org Git - apache/commitdiff
Support use of optional "tag" in syslog entries. Streamline the patch.
authorJim Jagielski <jim@apache.org>
Fri, 24 Feb 2017 19:39:00 +0000 (19:39 +0000)
committerJim Jagielski <jim@apache.org>
Fri, 24 Feb 2017 19:39:00 +0000 (19:39 +0000)
 PR 60525.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1784318 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/core.xml
modules/loggers/mod_syslog.c

diff --git a/CHANGES b/CHANGES
index 52ac3bc847e1fd233a9edaca2574c57afbc4d889..2affdfb7e8f92e50c39accd151628ad986307482 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- 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]
index b754934df3cd631b64ae8e88a42523d6d1ac854e..c7f83b10af7dca85cfe71b2aef65c583811f834f 100644 (file)
@@ -1538,7 +1538,7 @@ ErrorDocument 404 /cgi-bin/bad_urls.pl
 <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>
@@ -1571,10 +1571,15 @@ ErrorLog "|/usr/local/bin/httpd_errors"
     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
index cc4057315e84db0b353dd3899851cd3d2f87ed8f..5ddce9616ba8767d63703a80e0db51597f7a462d 100644 (file)
@@ -113,17 +113,37 @@ static void *syslog_error_log_init(apr_pool_t *p, server_rec *s)
         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;
 }