]> git.ipfire.org Git - thirdparty/squid.git/blob - src/store_log.cc
Import of fix-ranges branch
[thirdparty/squid.git] / src / store_log.cc
1
2 /*
3 * $Id: store_log.cc,v 1.26 2003/01/23 00:37:27 robertc Exp $
4 *
5 * DEBUG: section 20 Storage Manager Logging Functions
6 * AUTHOR: Duane Wessels
7 *
8 * SQUID Web Proxy Cache http://www.squid-cache.org/
9 * ----------------------------------------------------------
10 *
11 * Squid is the result of efforts by numerous individuals from
12 * the Internet community; see the CONTRIBUTORS file for full
13 * details. Many organizations have provided support for Squid's
14 * development; see the SPONSORS file for full details. Squid is
15 * Copyrighted (C) 2001 by the Regents of the University of
16 * California; see the COPYRIGHT file for full details. Squid
17 * incorporates software developed and/or copyrighted by other
18 * sources; see the CREDITS file for full details.
19 *
20 * This program is free software; you can redistribute it and/or modify
21 * it under the terms of the GNU General Public License as published by
22 * the Free Software Foundation; either version 2 of the License, or
23 * (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 * GNU General Public License for more details.
29 *
30 * You should have received a copy of the GNU General Public License
31 * along with this program; if not, write to the Free Software
32 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
33 *
34 */
35
36 #include "squid.h"
37 #include "Store.h"
38 #include "MemObject.h"
39
40 static const char *storeLogTags[] =
41 {
42 "CREATE",
43 "SWAPIN",
44 "SWAPOUT",
45 "RELEASE",
46 "SO_FAIL",
47 };
48
49 static Logfile *storelog = NULL;
50
51 void
52 storeLog(int tag, const StoreEntry * e)
53 {
54 MemObject *mem = e->mem_obj;
55 HttpReply const *reply;
56 if (NULL == storelog)
57 return;
58 #if UNUSED_CODE
59 if (EBIT_TEST(e->flags, ENTRY_DONT_LOG))
60 return;
61 #endif
62 if (mem != NULL) {
63 if (mem->log_url == NULL) {
64 debug(20, 1) ("storeLog: NULL log_url for %s\n", mem->url);
65 mem->dump();
66 mem->log_url = xstrdup(mem->url);
67 }
68 reply = e->getReply();
69 /*
70 * XXX Ok, where should we print the dir number here?
71 * Because if we print it before the swap file number, it'll break
72 * the existing log format.
73 */
74 logfilePrintf(storelog, "%9d.%03d %-7s %02d %08X %s %4d %9d %9d %9d %s %d/%d %s %s\n",
75 (int) current_time.tv_sec,
76 (int) current_time.tv_usec / 1000,
77 storeLogTags[tag],
78 e->swap_dirn,
79 e->swap_filen,
80 e->getMD5Text(),
81 reply->sline.status,
82 (int) reply->date,
83 (int) reply->last_modified,
84 (int) reply->expires,
85 reply->content_type.size() ? reply->content_type.buf() : "unknown",
86 reply->content_length,
87 contentLen(e),
88 RequestMethodStr[mem->method],
89 mem->log_url);
90 } else {
91 /* no mem object. Most RELEASE cases */
92 logfilePrintf(storelog, "%9d.%03d %-7s %02d %08X %s ? ? ? ? ?/? ?/? ? ?\n",
93 (int) current_time.tv_sec,
94 (int) current_time.tv_usec / 1000,
95 storeLogTags[tag],
96 e->swap_dirn,
97 e->swap_filen,
98 e->getMD5Text());
99 }
100 }
101
102 void
103 storeLogRotate(void)
104 {
105 if (NULL == storelog)
106 return;
107 logfileRotate(storelog);
108 }
109
110 void
111 storeLogClose(void)
112 {
113 if (NULL == storelog)
114 return;
115 logfileClose(storelog);
116 storelog = NULL;
117 }
118
119 void
120 storeLogOpen(void)
121 {
122 if (strcmp(Config.Log.store, "none") == 0) {
123 debug(20, 1) ("Store logging disabled\n");
124 return;
125 }
126 storelog = logfileOpen(Config.Log.store, 0, 1);
127 }