]>
Commit | Line | Data |
---|---|---|
20efa1c2 | 1 | /* |
bbc27441 | 2 | * Copyright (C) 1996-2014 The Squid Software Foundation and contributors |
20efa1c2 | 3 | * |
bbc27441 AJ |
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. | |
20efa1c2 AJ |
7 | */ |
8 | ||
bbc27441 AJ |
9 | /* DEBUG: section 46 Access Log - Squid format */ |
10 | ||
f7f3304a | 11 | #include "squid.h" |
20efa1c2 | 12 | #include "AccessLogEntry.h" |
38e16f92 | 13 | #include "format/Quoting.h" |
31971e6a | 14 | #include "format/Token.h" |
582c2af2 | 15 | #include "globals.h" |
c0e8c76f | 16 | #include "HttpRequest.h" |
20efa1c2 AJ |
17 | #include "log/File.h" |
18 | #include "log/Formats.h" | |
4d5904f7 | 19 | #include "SquidConfig.h" |
20efa1c2 AJ |
20 | #include "SquidTime.h" |
21 | ||
22 | void | |
41ebd397 | 23 | Log::Format::SquidNative(const AccessLogEntry::Pointer &al, Logfile * logfile) |
20efa1c2 | 24 | { |
8652f8e7 | 25 | char hierHost[MAX_IPSTRLEN]; |
20efa1c2 | 26 | |
c0e8c76f AJ |
27 | const char *user = NULL; |
28 | ||
29 | #if USE_AUTH | |
30 | if (al->request && al->request->auth_user_request != NULL) | |
31 | user = ::Format::QuoteUrlEncodeUsername(al->request->auth_user_request->username()); | |
32 | #endif | |
20efa1c2 AJ |
33 | |
34 | if (!user) | |
38e16f92 | 35 | user = ::Format::QuoteUrlEncodeUsername(al->cache.extuser); |
20efa1c2 | 36 | |
cb4f4424 | 37 | #if USE_OPENSSL |
20efa1c2 | 38 | if (!user) |
38e16f92 | 39 | user = ::Format::QuoteUrlEncodeUsername(al->cache.ssluser); |
20efa1c2 AJ |
40 | #endif |
41 | ||
42 | if (!user) | |
38e16f92 | 43 | user = ::Format::QuoteUrlEncodeUsername(al->cache.rfc931); |
20efa1c2 AJ |
44 | |
45 | if (user && !*user) | |
46 | safe_free(user); | |
47 | ||
8652f8e7 | 48 | char clientip[MAX_IPSTRLEN]; |
d4204018 | 49 | al->getLogClientIp(clientip, MAX_IPSTRLEN); |
8652f8e7 | 50 | |
7f06a3d8 AJ |
51 | static SBuf method; |
52 | if (al->_private.method_str) | |
53 | method.assign(al->_private.method_str); | |
54 | else | |
55 | method = al->http.method.image(); | |
56 | ||
01bd87d8 | 57 | logfilePrintf(logfile, "%9ld.%03d %6ld %s %s%s/%03d %" PRId64 " " SQUIDSBUFPH " %s %s %s%s/%s %s%s", |
20efa1c2 AJ |
58 | (long int) current_time.tv_sec, |
59 | (int) current_time.tv_usec / 1000, | |
01bd87d8 | 60 | tvToMsec(al->cache.trTime), |
8652f8e7 | 61 | clientip, |
02c8dde5 | 62 | LogTags_str[al->cache.code], |
20efa1c2 AJ |
63 | al->http.statusSfx(), |
64 | al->http.code, | |
cc0ca3b9 | 65 | al->http.clientReplySz.messageTotal(), |
7f06a3d8 | 66 | SQUIDSBUFPRINT(method), |
20efa1c2 AJ |
67 | al->url, |
68 | user ? user : dash_str, | |
69 | al->hier.ping.timedout ? "TIMEOUT_" : "", | |
70 | hier_code_str[al->hier.code], | |
4dd643d5 | 71 | al->hier.tcpServer != NULL ? al->hier.tcpServer->remote.toStr(hierHost, sizeof(hierHost)) : "-", |
20efa1c2 AJ |
72 | al->http.content_type, |
73 | (Config.onoff.log_mime_hdrs?"":"\n")); | |
74 | ||
75 | safe_free(user); | |
76 | ||
77 | if (Config.onoff.log_mime_hdrs) { | |
38e16f92 AJ |
78 | char *ereq = ::Format::QuoteMimeBlob(al->headers.request); |
79 | char *erep = ::Format::QuoteMimeBlob(al->headers.reply); | |
20efa1c2 AJ |
80 | logfilePrintf(logfile, " [%s] [%s]\n", ereq, erep); |
81 | safe_free(ereq); | |
82 | safe_free(erep); | |
83 | } | |
84 | } | |
f53969cc | 85 |