[squid-users] Syslog patch for 2.5STABLE9

From: Kevin <[email protected]>
Date: Fri, 25 Feb 2005 15:40:39 -0600

On Fri, 25 Feb 2005 12:54:30 -0600, Kevin <kkadow@gmail.com> wrote:
> Has anybody put together a good patch for Squid (2.5.X) to record access
> information via syslog instead of writing to disk? It looks like I could simply
> modify logfilePrintf() in logfile.c?

While it's bad form to reply to one's own post, yes, it really is that simple,
I wrapped the logfilePrintf calls in access_log.c with if statements.

> (P.S. Yes, I fully understand the various issues with and drawbacks of
> using "syslog" for access logs, particularly across a network.)

That said, here is a functional (beta) patch for sending access_log to syslog,
use at your own risk. To enable syslog logging, change cache_access_log
in squid.conf to read "cache_access_log syslog".

diff squid-2.5.STABLE9/src/access_log.c
squid-2.5.STABLE9+syslog/src/access_log.c
--- squid-2.5.STABLE9/src/access_log.c Mon Sep 27 17:34:19 2004
+++ squid-2.5.STABLE9+syslog/src/access_log.c Fri Feb 25 14:14:33 2005
@@ -35,6 +35,8 @@

#include "squid.h"
+#include <syslog.h>
+#include <stdarg.h>

static void accessLogSquid(AccessLogEntry * al);
static void accessLogCommon(AccessLogEntry * al);
@@ -245,7 +247,8 @@
     client = inet_ntoa(al->cache.caddr);
  user = accessLogFormatName(al->cache.authuser ?
     al->cache.authuser : al->cache.rfc931);
- logfilePrintf(logfile, "%9d.%03d %6d %s %s/%03d %lu %s %s %s %s%s/%s %s",
+ if (LogfileStatus == LOG_ENABLE)
+ logfilePrintf(logfile, "%9d.%03d %6d %s %s/%03d %lu %s %s %s %s%s/%s %s",
     (int) current_time.tv_sec,
     (int) current_time.tv_usec / 1000,
     al->cache.msec,
@@ -260,6 +263,22 @@
     hier_strings[al->hier.code],
     al->hier.host,
     al->http.content_type);
+ else if (LogfileStatus == LOG_TOSYSLOG)
+ syslog(LOG_INFO, "%9d.%03d %6d %s %s/%03d %lu %s %s %s %s%s/%s %s",
+ (int) current_time.tv_sec,
+ (int) current_time.tv_usec / 1000,
+ al->cache.msec,
+ client,
+ log_tags[al->cache.code],
+ al->http.code,
+ (unsigned long) al->cache.size,
+ al->private.method_str,
+ al->url,
+ user && *user ? user : dash_str,
+ al->hier.ping.timedout ? "TIMEOUT_" : "",
+ hier_strings[al->hier.code],
+ al->hier.host,
+ al->http.content_type);
  safe_free(user);
}

@@ -274,7 +293,8 @@
     client = inet_ntoa(al->cache.caddr);
  user1 = accessLogFormatName(al->cache.authuser);
  user2 = accessLogFormatName(al->cache.rfc931);
- logfilePrintf(logfile, "%s %s %s [%s] \"%s %s HTTP/%d.%d\" %d %ld %s:%s",
+ if (LogfileStatus == LOG_ENABLE)
+ logfilePrintf(logfile, "%s %s %s [%s] \"%s %s HTTP/%d.%d\" %d
%ld %s:%s",
     client,
     user2 ? user2 : dash_str,
     user1 ? user1 : dash_str,
@@ -286,6 +306,19 @@
     (long int) al->cache.size,
     log_tags[al->cache.code],
     hier_strings[al->hier.code]);
+ else if (LogfileStatus == LOG_TOSYSLOG)
+ syslog(LOG_INFO, "%s %s %s [%s] \"%s %s HTTP/%d.%d\" %d %ld %s:%s",
+ client,
+ user2 ? user2 : dash_str,
+ user1 ? user1 : dash_str,
+ mkhttpdlogtime(&squid_curtime),
+ al->private.method_str,
+ al->url,
+ al->http.version.major, al->http.version.minor,
+ al->http.code,
+ (long int) al->cache.size,
+ log_tags[al->cache.code],
+ hier_strings[al->hier.code]);
  safe_free(user1);
  safe_free(user2);
}
@@ -293,7 +326,7 @@
void
accessLogLog(AccessLogEntry * al)
{
- if (LogfileStatus != LOG_ENABLE)
+ if (LogfileStatus == LOG_DISABLE)
     return;
  if (al->url == NULL)
     al->url = dash_str;
@@ -313,13 +346,18 @@
  if (Config.onoff.log_mime_hdrs) {
     char *ereq = log_quote(al->headers.request);
     char *erep = log_quote(al->headers.reply);
+ if (LogfileStatus == LOG_ENABLE)
     logfilePrintf(logfile, " [%s] [%s]\n", ereq, erep);
+ else if (LogfileStatus == LOG_TOSYSLOG)
+ syslog(LOG_INFO, " [%s] [%s]\n", ereq, erep);
     safe_free(ereq);
     safe_free(erep);
  } else {
- logfilePrintf(logfile, "\n");
+ if (LogfileStatus == LOG_ENABLE)
+ logfilePrintf(logfile, "\n");
  }
- logfileFlush(logfile);
+ if (LogfileStatus == LOG_ENABLE)
+ logfileFlush(logfile);
#if MULTICAST_MISS_STREAM
  if (al->cache.code != LOG_TCP_MISS)
     (void) 0;
@@ -349,6 +387,8 @@
#if FORW_VIA_DB
  fvdbClear();
#endif
+ if (LogfileStatus == LOG_TOSYSLOG)
+ return;
  if (NULL == logfile)
     return;
  logfileRotate(logfile);
@@ -360,6 +400,8 @@
void
accessLogClose(void)
{
+ if (LogfileStatus == LOG_TOSYSLOG)
+ return;
  if (NULL == logfile)
     return;
  logfileClose(logfile);
@@ -386,6 +428,11 @@
  assert(sizeof(log_tags) == (LOG_TYPE_MAX + 1) * sizeof(char *));
  if (strcasecmp(Config.Log.access, "none") == 0)
     return;
+ if (strcasecmp(Config.Log.access, "syslog") == 0) {
+ logfile=NULL;
+ LogfileStatus = LOG_TOSYSLOG;
+ return;
+ }
  logfile = logfileOpen(Config.Log.access, MAX_URL << 1, 1);
  LogfileStatus = LOG_ENABLE;
#if HEADERS_LOG
diff squid-2.5.STABLE9/src/defines.h squid-2.5.STABLE9+syslog/src/defines.h
--- squid-2.5.STABLE9/src/defines.h Thu Aug 8 15:17:39 2002
+++ squid-2.5.STABLE9+syslog/src/defines.h Fri Feb 25 14:13:19 2005
@@ -142,6 +142,7 @@
#define current_stacksize(stack) ((stack)->top - (stack)->base)

/* logfile status */
+#define LOG_TOSYSLOG 2
#define LOG_ENABLE 1
#define LOG_DISABLE 0

Received on Fri Feb 25 2005 - 14:40:41 MST

This archive was generated by hypermail pre-2.1.9 : Tue Mar 01 2005 - 12:00:02 MST