1 /*
2  * Copyright (C) 1996-2021 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 #include "squid.h"
10 #include "AccessLogEntry.h"
11 #include "acl/FilledChecklist.h"
12 #include "globals.h"
13 #include "HttpReply.h"
14 #include "icap_log.h"
15 #include "log/CustomLog.h"
16 #include "log/File.h"
17 #include "log/Formats.h"
18 #include "SquidConfig.h"
19 
20 int IcapLogfileStatus = LOG_DISABLE;
21 
22 void
icapLogOpen()23 icapLogOpen()
24 {
25     CustomLog *log;
26 
27     for (log = Config.Log.icaplogs; log; log = log->next) {
28         if (log->type == Log::Format::CLF_NONE)
29             continue;
30 
31         log->logfile = logfileOpen(log->filename, log->bufferSize, log->fatal);
32 
33         IcapLogfileStatus = LOG_ENABLE;
34     }
35 }
36 
37 void
icapLogClose()38 icapLogClose()
39 {
40     CustomLog *log;
41 
42     for (log = Config.Log.icaplogs; log; log = log->next) {
43         if (log->logfile) {
44             logfileClose(log->logfile);
45             log->logfile = NULL;
46         }
47     }
48 }
49 
50 void
icapLogRotate()51 icapLogRotate()
52 {
53     for (CustomLog* log = Config.Log.icaplogs; log; log = log->next) {
54         if (log->logfile) {
55             logfileRotate(log->logfile, Config.Log.rotateNumber);
56         }
57     }
58 }
59 
icapLogLog(AccessLogEntry::Pointer & al)60 void icapLogLog(AccessLogEntry::Pointer &al)
61 {
62     if (IcapLogfileStatus == LOG_ENABLE) {
63         ACLFilledChecklist checklist(NULL, al->adapted_request, NULL);
64         if (al->reply) {
65             checklist.reply = al->reply;
66             HTTPMSGLOCK(checklist.reply);
67         }
68         accessLogLogTo(Config.Log.icaplogs, al, &checklist);
69     }
70 }
71 
72