"Runtime" logging into access.log. How?

From: Slivarez ! <slivarez@dont-contact.us>
Date: Wed, 02 Jun 2004 11:06:18 +0400

Hi all.

I need to make squid-2.5.STABLE5 write information into access.log during downloading process but not after downloading whole file. Is there any official patches for that?

P.S. I have found patch-aa for squid-2.5.STABLE1, but it does not work (even in STABLE1). Maybe somebody can find an errors in this patch?

Best regards,
slivarez

********************patch-aa*************************
--- access_log.c.orig Sun Jun 16 18:25:40 2002
+++ access_log.c Mon Mar 31 11:23:03 2003
@@ -223,7 +223,11 @@
     return buf;
 }
 
+#ifdef ACLOG
+char *
+#else
 static char *
+#endif
 accessLogFormatName(const char *name)
 {
     if (NULL == name)
--- client_side.c.orig Mon Sep 23 11:04:03 2002
+++ client_side.c Mon Mar 31 14:58:13 2003
@@ -1,4 +1,3 @@
-
 /*
  * $Id: client_side.c,v 1.561.2.20 2002/09/23 04:04:03 wessels Exp $
  *
@@ -2096,6 +2096,98 @@
         kb_incr(&statCounter.client_http.kbytes_out, size);
         if (isTcpHit(http->log_type))
             kb_incr(&statCounter.client_http.hit_kbytes_out, size);
+
+#ifdef ACLOG
+ {
+ extern int acfd;
+ extern char *acfifo; /* XXX: for error handling */
+
+ if (acfd > -1) {
+ AccessLogEntry * al = &http->al;
+ const char *client = NULL;
+ char *user = NULL;
+ extern char *accessLogFormatName(const char *name);
+ char buf[0x4000];
+ int n;
+
+ ConnStateData *conn = http->conn;
+ request_t *request = http->request;
+ MemObject *mem = NULL;
+
+ if (http->entry)
+ mem = http->entry->mem_obj;
+ if (http->out.size || http->log_type) {
+ http->al.icp.opcode = ICP_INVALID;
+ http->al.url = http->log_uri;
+ if (mem) {
+ http->al.http.code = mem->reply->sline.status;
+ http->al.http.content_type =
+ strBuf(mem->reply->content_type);
+ }
+ http->al.cache.caddr = conn->log_addr;
+ http->al.cache.size = http->out.size;
+ http->al.cache.code = http->log_type;
+ http->al.cache.msec = tvSubMsec(http->start,
+ current_time);
+ if (request) {
+ Packer p;
+ MemBuf mb;
+ memBufDefInit(&mb);
+ packerToMemInit(&p, &mb);
+ httpHeaderPackInto(&request->header, &p);
+ http->al.http.method = request->method;
+ http->al.http.version = request->http_ver;
+ http->al.headers.request = xstrdup(mb.buf);
+ http->al.hier = request->hier;
+ if (request->auth_user_request) {
+ http->al.cache.authuser = xstrdup(
+ authenticateUserRequestUsername(
+ request->auth_user_request));
+ authenticateAuthUserRequestUnlock(
+ request->auth_user_request);
+ request->auth_user_request = NULL;
+ }
+ if (conn->rfc931[0])
+ http->al.cache.rfc931 = conn->rfc931;
+ packerClean(&p);
+ memBufClean(&mb);
+ }
+
+ if (Config.onoff.log_fqdn)
+ client = fqdncache_gethostbyaddr(
+ al->cache.caddr, FQDN_LOOKUP_IF_MISS);
+ if (client == NULL)
+ client = inet_ntoa(al->cache.caddr);
+
+ user = accessLogFormatName(al->cache.authuser ?
+ al->cache.authuser : al->cache.rfc931);
+ n = snprintf(buf, sizeof buf,
+ "%9d.%03d %6d %s %s/%03d %ld (+%ld) "
+ "%s %s %s%s/%s %s\n",
+ (int) current_time.tv_sec,
+ (int) current_time.tv_usec / 1000,
+ al->cache.msec,
+ client,
+ log_tags[al->cache.code],
+ al->http.code,
+ (long int) al->cache.size,
+ size,
+ al->url,
+ user && *user ? user : dash_str,
+ al->hier.ping.timedout ? "TIMEOUT_" : "",
+ hier_strings[al->hier.code],
+ al->hier.host,
+ al->http.content_type);
+
+ /* XXX: blocking write */
+ write(acfd, buf, n > sizeof buf ? sizeof buf : n);
+
+ safe_free(user);
+ }
+ } /* if */
+ }
+#endif
+
     }
 #if SIZEOF_SIZE_T == 4
     if (http->out.size > 0x7FFF0000) {
--- main.c.orig Mon Mar 31 14:10:38 2003
+++ main.c Mon Mar 31 15:09:48 2003
@@ -35,6 +35,11 @@
 
 #include "squid.h"
 
+#ifdef ACLOG
+int acfd = -1;
+char *acfifo = NULL;
+#endif
+
 /* for error reporting from xmalloc and friends */
 extern void (*failure_notify) (const char *);
 
@@ -95,6 +100,9 @@
         " -s Enable logging to syslog.\n"
         " -u port Specify ICP port number (default: %d), disable with 0.\n"
         " -v Print version.\n"
+#ifdef ACLOG
+ " -x fifo Print account log to fifo. default: /dev/null :))\n"
+#endif
         " -z Create swap directories\n"
         " -C Do not catch fatal signals.\n"
         " -D Disable initial DNS tests.\n"
@@ -115,7 +123,12 @@
     extern char *optarg;
     int c;
 
- while ((c = getopt(argc, argv, "CDFNRSVYXa:d:f:hk:m::su:vz?")) != -1) {
+ while ((c = getopt(argc, argv,
+ "CDFNRSVYXa:d:f:hk:m::su:v"
+#ifdef ACLOG
+ "x:"
+#endif
+ "z?")) != -1) {
         switch (c) {
         case 'C':
             opt_catch_signals = 0;
@@ -222,6 +235,11 @@
             printf("Squid Cache: Version %s\nconfigure options: %s\n", version_string, SQUID_CONFIGURE_OPTIONS);
             exit(0);
             /* NOTREACHED */
+#ifdef ACLOG
+ case 'x':
+ acfifo = optarg;
+ break;
+#endif
         case 'z':
             opt_create_swap_dirs = 1;
             break;
@@ -571,6 +589,22 @@
         eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1);
         eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15.0, 1);
     }
+
+#ifdef ACLOG
+ if (!configured_once && acfifo)
+ for (;;) {
+ if ((acfd = open(acfifo, O_WRONLY)) < 0) {
+ if (errno == EINTR)
+ continue;
+ if (errno == ENOENT &&
+ mkfifo(acfifo, 0644) < 0)
+ err(1, acfifo);
+ continue;
+ }
+ break;
+ }
+#endif
+
     configured_once = 1;
 }
*************************end of patch*******************************
Received on Wed Jun 02 2004 - 01:06:21 MDT

This archive was generated by hypermail pre-2.1.9 : Wed Jun 30 2004 - 12:00:03 MDT