]> git.ipfire.org Git - thirdparty/squid.git/blame - src/store_log.cc
Fixed swap meta for store_swapin.c and store_swapout.c
[thirdparty/squid.git] / src / store_log.cc
CommitLineData
e3ef2b09 1#include "squid.h"
2
3static char *storeLogTags[] =
4{
5 "CREATE",
6 "SWAPIN",
7 "SWAPOUT",
8 "RELEASE"
9};
10
11static int storelog_fd = -1;
12
13void
14storeLog(int tag, const StoreEntry * e)
15{
16 LOCAL_ARRAY(char, logmsg, MAX_URL << 1);
17 MemObject *mem = e->mem_obj;
18 struct _http_reply *reply;
19 if (storelog_fd < 0)
20 return;
21 if (mem == NULL)
22 return;
23 if (mem->log_url == NULL) {
24 debug(20, 1) ("storeLog: NULL log_url for %s\n", mem->url);
25 storeMemObjectDump(mem);
26 mem->log_url = xstrdup(mem->url);
27 }
28 reply = mem->reply;
29 snprintf(logmsg, MAX_URL << 1, "%9d.%03d %-7s %08X %4d %9d %9d %9d %s %d/%d %s %s\n",
30 (int) current_time.tv_sec,
31 (int) current_time.tv_usec / 1000,
32 storeLogTags[tag],
33 e->swap_file_number,
34 reply->code,
35 (int) reply->date,
36 (int) reply->last_modified,
37 (int) reply->expires,
38 reply->content_type[0] ? reply->content_type : "unknown",
39 reply->content_length,
40 (int) (mem->inmem_hi - mem->reply->hdr_sz),
41 RequestMethodStr[mem->method],
42 mem->log_url);
43 file_write(storelog_fd,
44 -1,
45 xstrdup(logmsg),
46 strlen(logmsg),
47 NULL,
48 NULL,
49 xfree);
50}
51
52void
53storeLogRotate(void)
54{
55 char *fname = NULL;
56 int i;
57 LOCAL_ARRAY(char, from, MAXPATHLEN);
58 LOCAL_ARRAY(char, to, MAXPATHLEN);
59#ifdef S_ISREG
60 struct stat sb;
61#endif
62
63 if (storelog_fd > -1) {
64 file_close(storelog_fd);
65 storelog_fd = -1;
66 }
67 if ((fname = Config.Log.store) == NULL)
68 return;
69 if (strcmp(fname, "none") == 0)
70 return;
71#ifdef S_ISREG
72 if (stat(fname, &sb) == 0)
73 if (S_ISREG(sb.st_mode) == 0)
74 return;
75#endif
76
77 debug(20, 1) ("storeLogRotate: Rotating.\n");
78
79 /* Rotate numbers 0 through N up one */
80 for (i = Config.Log.rotateNumber; i > 1;) {
81 i--;
82 snprintf(from, MAXPATHLEN, "%s.%d", fname, i - 1);
83 snprintf(to, MAXPATHLEN, "%s.%d", fname, i);
84 rename(from, to);
85 }
86 /* Rotate the current log to .0 */
87 if (Config.Log.rotateNumber > 0) {
88 snprintf(to, MAXPATHLEN, "%s.%d", fname, 0);
89 rename(fname, to);
90 }
91 storelog_fd = file_open(fname, O_WRONLY | O_CREAT, NULL, NULL, NULL);
92 if (storelog_fd < 0) {
93 debug(50, 0) ("storeLogRotate: %s: %s\n", fname, xstrerror());
94 debug(20, 1) ("Store logging disabled\n");
95 }
96}
97
98void
99storeLogClose(void)
100{
101 if (storelog_fd >= 0)
102 file_close(storelog_fd);
103}
104
105void
106storeLogOpen(void)
107{
108 if (strcmp(Config.Log.store, "none") == 0)
109 storelog_fd = -1;
110 else
111 storelog_fd = file_open(Config.Log.store,
112 O_WRONLY | O_CREAT,
113 NULL,
114 NULL,
115 NULL);
116 if (storelog_fd < 0)
117 debug(20, 1) ("Store logging disabled\n");
118}