]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug #1489: add syslog priority and facility to access_log
authorserassio <>
Sun, 14 May 2006 17:52:51 +0000 (17:52 +0000)
committerserassio <>
Sun, 14 May 2006 17:52:51 +0000 (17:52 +0000)
Patch provided by Gonzalo Arana: Thanks !

src/cf.data.pre
src/logfile.cc

index 5f8f82d2e4b12560428a8da1a57e17ada37c34c5..ccbb0d85747706e7841e0d1a7ea0ae4b8cf54e8d 100644 (file)
@@ -1,6 +1,6 @@
 
 #
-# $Id: cf.data.pre,v 1.412 2006/04/02 09:21:21 serassio Exp $
+# $Id: cf.data.pre,v 1.413 2006/05/14 11:52:51 serassio Exp $
 #
 #
 # SQUID Web Proxy Cache                http://www.squid-cache.org/
@@ -1259,7 +1259,14 @@ DOC_START
        To disable logging of a request use the filepath "none", in which case
        a logformat name should not be specified.
 
-       To log the request via syslog specify a filepath of "syslog"
+       To log the request via syslog specify a filepath of "syslog":
+
+       access_log syslog[:facility|priority] [format [acl1 [acl2 ....]]]
+       where facility could be any of:
+       LOG_AUTHPRIV, LOG_DAEMON, LOG_LOCAL0 .. LOG_LOCAL7 or LOG_USER.
+
+       And priority could be any of:
+       LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG.
 DOC_END
 
 
index 22414d3d48d43a606e6a8f6065bf80612e0683a6..006286f38decfd15758ced2d7422bab2150669d7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: logfile.cc,v 1.17 2005/03/06 21:48:55 serassio Exp $
+ * $Id: logfile.cc,v 1.18 2006/05/14 11:52:52 serassio Exp $
  *
  * DEBUG: section 50    Log file handling
  * AUTHOR: Duane Wessels
 
 static void logfileWriteWrapper(Logfile * lf, const void *buf, size_t len);
 
+struct syslog_symbol_t
+{
+    const char* name;
+    int value;
+};
+
+static int syslog_ntoa (const char* s)
+{
+#define syslog_symbol(a) #a, a
+    static syslog_symbol_t _symbols[] = {
+                                            { syslog_symbol(LOG_AUTHPRIV) },
+                                            { syslog_symbol(LOG_DAEMON) },
+                                            { syslog_symbol(LOG_LOCAL0) },
+                                            { syslog_symbol(LOG_LOCAL1) },
+                                            { syslog_symbol(LOG_LOCAL2) },
+                                            { syslog_symbol(LOG_LOCAL3) },
+                                            { syslog_symbol(LOG_LOCAL4) },
+                                            { syslog_symbol(LOG_LOCAL5) },
+                                            { syslog_symbol(LOG_LOCAL6) },
+                                            { syslog_symbol(LOG_LOCAL7) },
+                                            { syslog_symbol(LOG_USER) },
+                                            { syslog_symbol(LOG_ERR) },
+                                            { syslog_symbol(LOG_WARNING) },
+                                            { syslog_symbol(LOG_NOTICE) },
+                                            { syslog_symbol(LOG_INFO) },
+                                            { syslog_symbol(LOG_DEBUG) },
+                                            { NULL, 0 }
+                                        };
+
+    for (syslog_symbol_t* p = _symbols; p->name != NULL; ++p)
+        if (!strcmp(s, p->name) || !strcmp(s, p->name+4))
+            return p->value;
+
+    return 0;
+}
+
+#define PRIORITY_MASK (LOG_ERR | LOG_WARNING | LOG_NOTICE | LOG_INFO | LOG_DEBUG)
 Logfile *
 logfileOpen(const char *path, size_t bufsz, int fatal_flag)
 {
@@ -48,10 +85,26 @@ logfileOpen(const char *path, size_t bufsz, int fatal_flag)
 
 #if HAVE_SYSLOG
 
-    if (strcmp(path, "syslog") == 0) {
+    if (strncmp(path, "syslog", 6) == 0) {
         lf->flags.syslog = 1;
         lf->syslog_priority = LOG_INFO;
         lf->fd = -1;
+
+        if (path[6] != '\0') {
+            path += 7;
+            char* delim = strchr(path, '|');
+
+            if (delim != NULL)
+                *delim = '\0';
+
+            lf->syslog_priority = syslog_ntoa(path);
+
+            if (delim != NULL)
+                lf->syslog_priority |= syslog_ntoa(delim+1);
+
+            if (0 == lf->syslog_priority & PRIORITY_MASK)
+                lf->syslog_priority |= LOG_INFO;
+        }
     } else
 #endif
     {