store_log.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 /* DEBUG: section 20 Storage Manager Logging Functions */
10 
11 #include "squid.h"
12 #include "debug/Messages.h"
13 #include "format/Token.h"
14 #include "HttpReply.h"
15 #include "log/File.h"
16 #include "MemObject.h"
17 #include "mgr/Registration.h"
18 #include "SquidConfig.h"
19 #include "Store.h"
20 #include "store_log.h"
21 
22 static const char *storeLogTags[] = {
23  "CREATE",
24  "SWAPIN",
25  "SWAPOUT",
26  "RELEASE",
27  "SO_FAIL",
28 };
29 
32 
33 static Logfile *storelog = nullptr;
34 
36 
37 void
38 storeLog(int tag, const StoreEntry * e)
39 {
40  MemObject *mem = e->mem_obj;
41  HttpReply const *reply;
42 
43  if (str_unknown.size()==0)
44  str_unknown="unknown"; //hack. Delay initialization as string doesn't support global variables..
45 
46  if (nullptr == storelog)
47  return;
48 
49  ++storeLogTagsCounts[tag];
50  if (mem != nullptr) {
51  reply = &mem->freshestReply();
52  /*
53  * XXX Ok, where should we print the dir number here?
54  * Because if we print it before the swap file number, it'll break
55  * the existing log format.
56  */
57 
58  String ctype=(reply->content_type.size() ? reply->content_type.termedBuf() : str_unknown);
59 
60  // mem_obj may still lack logging details; especially in RELEASE cases
61  const char *logUri = mem->hasUris() ? mem->logUri() : "?";
62 
64  logfilePrintf(storelog, "%9d.%03d %-7s %02d %08X %s %4d %9d %9d %9d " SQUIDSTRINGPH " %" PRId64 "/%" PRId64 " " SQUIDSBUFPH " %s\n",
65  (int) current_time.tv_sec,
66  (int) current_time.tv_usec / 1000,
67  storeLogTags[tag],
68  e->swap_dirn,
69  e->swap_filen,
70  e->getMD5Text(),
71  reply->sline.status(),
72  (int) reply->date,
73  (int) reply->last_modified,
74  (int) reply->expires,
75  SQUIDSTRINGPRINT(ctype),
76  reply->content_length,
77  e->contentLen(),
78  SQUIDSBUFPRINT(mem->method.image()),
79  logUri);
81  } else {
82  /* no mem object. Most RELEASE cases */
84  logfilePrintf(storelog, "%9d.%03d %-7s %02d %08X %s ? ? ? ? ?/? ?/? ? ?\n",
85  (int) current_time.tv_sec,
86  (int) current_time.tv_usec / 1000,
87  storeLogTags[tag],
88  e->swap_dirn,
89  e->swap_filen,
90  e->getMD5Text());
92  }
93 }
94 
95 void
97 {
98  if (nullptr == storelog)
99  return;
100 
102 }
103 
104 void
106 {
107  if (nullptr == storelog)
108  return;
109 
111 
112  storelog = nullptr;
113 }
114 
115 static void
117 {
118  Mgr::RegisterAction("store_log_tags", "Histogram of store.log tags",
119  storeLogTagsHist, 0, 1);
120 }
121 
122 void
124 {
126 
127  if (Config.Log.store == nullptr || strcmp(Config.Log.store, "none") == 0) {
128  debugs(20, Important(42), "Store logging disabled");
129  return;
130  }
131 
133 }
134 
135 void
137 {
138  int tag;
139  for (tag = 0; tag <= STORE_LOG_SWAPOUTFAIL; ++tag) {
140  storeAppendPrintf(e, "%s %d\n",
141  storeLogTags[tag],
142  storeLogTagsCounts[tag]);
143  }
144 }
145 
String content_type
Definition: HttpReply.h:46
void logfileClose(Logfile *lf)
Definition: File.cc:92
static OBJH storeLogTagsHist
Definition: store_log.cc:31
MemObject * mem_obj
Definition: Store.h:220
void storeAppendPrintf(StoreEntry *e, const char *fmt,...)
Definition: store.cc:855
static int storeLogTagsCounts[STORE_LOG_SWAPOUTFAIL+1]
Definition: store_log.cc:30
#define SQUIDSTRINGPRINT(s)
Definition: SquidString.h:22
void storeLogClose(void)
Definition: store_log.cc:105
const SBuf & image() const
static Logfile * storelog
Definition: store_log.cc:33
Http::StatusLine sline
Definition: HttpReply.h:56
time_t last_modified
Definition: HttpReply.h:42
int rotateNumber
Definition: SquidConfig.h:191
#define SQUIDSTRINGPH
Definition: SquidString.h:21
void logfilePrintf(Logfile *lf, const char *fmt,...)
Definition: File.cc:114
static void storeLogRegisterWithCacheManager(void)
Definition: store_log.cc:116
const char * logUri() const
client request URI used for logging; storeId() by default
Definition: MemObject.cc:64
time_t expires
Definition: HttpReply.h:44
struct timeval current_time
the current UNIX time in timeval {seconds, microseconds} format
Definition: gadgets.cc:18
void OBJH(StoreEntry *)
Definition: forward.h:44
#define SQUIDSBUFPRINT(s)
Definition: SBuf.h:32
Http::StatusCode status() const
retrieve the status code for this status line
Definition: StatusLine.h:45
void logfileLineStart(Logfile *lf)
Definition: File.cc:126
sdirno swap_dirn
Definition: Store.h:237
int64_t contentLen() const
Definition: Store.h:254
Logfile * logfileOpen(const char *path, size_t bufsz, int fatal_flag)
Definition: File.cc:40
HttpRequestMethod method
Definition: MemObject.h:147
void logfileRotate(Logfile *lf, int16_t rotateCount)
Definition: File.cc:101
int64_t content_length
Definition: Message.h:83
time_t date
Definition: HttpReply.h:40
Definition: File.h:38
void storeLogRotate(void)
Definition: store_log.cc:96
@ STORE_LOG_SWAPOUTFAIL
Definition: enums.h:155
const char * termedBuf() const
Definition: SquidString.h:92
struct SquidConfig::@89 Log
bool hasUris() const
whether setUris() has been called
Definition: MemObject.cc:70
size_type size() const
Definition: SquidString.h:73
void RegisterAction(char const *action, char const *desc, OBJH *handler, Protected, Atomic, Format)
Definition: Registration.cc:54
#define Important(id)
Definition: Messages.h:93
void storeLog(int tag, const StoreEntry *e)
Definition: store_log.cc:38
#define PRId64
Definition: types.h:104
const HttpReply & freshestReply() const
Definition: MemObject.h:68
static String str_unknown
Definition: store_log.cc:35
void logfileLineEnd(Logfile *lf)
Definition: File.cc:132
void storeLogOpen(void)
Definition: store_log.cc:123
char * store
Definition: SquidConfig.h:184
static const char * storeLogTags[]
Definition: store_log.cc:22
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
const char * getMD5Text() const
Definition: store.cc:207
#define SQUIDSBUFPH
Definition: SBuf.h:31
class SquidConfig Config
Definition: SquidConfig.cc:12
sfileno swap_filen
unique ID inside a cache_dir for swapped out entries; -1 for others
Definition: Store.h:235

 

Introduction

Documentation

Support

Miscellaneous