drogon
C++14/17-based HTTP application framework
Loading...
Searching...
No Matches
AccessLogger.h
1
6
7#pragma once
8
10#include <drogon/HttpResponse.h>
12#include <trantor/utils/AsyncFileLogger.h>
13#include <vector>
14#include <regex>
15
16namespace drogon
17{
18namespace plugin
19{
108class DROGON_EXPORT AccessLogger : public drogon::Plugin<AccessLogger>
109{
110 public:
111 AccessLogger()
112 {
113 }
114
115 void initAndStart(const Json::Value &config) override;
116 void shutdown() override;
117
118 private:
119 trantor::AsyncFileLogger asyncFileLogger_;
120 int logIndex_{0};
121 bool useLocalTime_{true};
122 bool showMicroseconds_{true};
123 bool useCustomTimeFormat_{false};
124 std::string timeFormat_;
125 static bool useRealIp_;
126 std::regex exemptRegex_;
127 bool regexFlag_{false};
128
129 using LogFunction = std::function<void(trantor::LogStream &,
130 const drogon::HttpRequestPtr &,
131 const drogon::HttpResponsePtr &)>;
132 std::vector<LogFunction> logFunctions_;
133 void logging(trantor::LogStream &stream,
134 const drogon::HttpRequestPtr &req,
135 const drogon::HttpResponsePtr &resp);
136 void createLogFunctions(std::string format);
137 LogFunction newLogFunction(const std::string &placeholder);
138 std::map<std::string, LogFunction> logFunctionMap_;
139 //$request_path
140 static void outputReqPath(trantor::LogStream &,
141 const drogon::HttpRequestPtr &,
142 const drogon::HttpResponsePtr &);
143 //$request_query
144 static void outputReqQuery(trantor::LogStream &,
145 const drogon::HttpRequestPtr &,
146 const drogon::HttpResponsePtr &);
147 //$request_url
148 static void outputReqURL(trantor::LogStream &,
149 const drogon::HttpRequestPtr &,
150 const drogon::HttpResponsePtr &);
151 //$version
152 static void outputVersion(trantor::LogStream &,
153 const drogon::HttpRequestPtr &,
154 const drogon::HttpResponsePtr &);
155 //$request
156 static void outputReqLine(trantor::LogStream &,
157 const drogon::HttpRequestPtr &,
158 const drogon::HttpResponsePtr &);
159 //$date
160 void outputDate(trantor::LogStream &,
161 const drogon::HttpRequestPtr &,
162 const drogon::HttpResponsePtr &) const;
163 //$request_date
164 void outputReqDate(trantor::LogStream &,
165 const drogon::HttpRequestPtr &,
166 const drogon::HttpResponsePtr &) const;
167 //$remote_addr
168 static void outputRemoteAddr(trantor::LogStream &,
169 const drogon::HttpRequestPtr &,
170 const drogon::HttpResponsePtr &);
171 //$local_addr
172 static void outputLocalAddr(trantor::LogStream &,
173 const drogon::HttpRequestPtr &,
174 const drogon::HttpResponsePtr &);
175 //$request_len $body_bytes_received
176 static void outputReqLength(trantor::LogStream &,
177 const drogon::HttpRequestPtr &,
178 const drogon::HttpResponsePtr &);
179 //$response_len $body_bytes_sent
180 static void outputRespLength(trantor::LogStream &,
181 const drogon::HttpRequestPtr &,
182 const drogon::HttpResponsePtr &);
183 //$method
184 static void outputMethod(trantor::LogStream &,
185 const drogon::HttpRequestPtr &,
186 const drogon::HttpResponsePtr &);
187 //$thread
188 static void outputThreadNumber(trantor::LogStream &,
189 const drogon::HttpRequestPtr &,
190 const drogon::HttpResponsePtr &);
191 //$http_[header_name]
192 static void outputReqHeader(trantor::LogStream &stream,
193 const drogon::HttpRequestPtr &req,
194 const std::string &headerName);
195 //$cookie_[cookie_name]
196 static void outputReqCookie(trantor::LogStream &stream,
197 const drogon::HttpRequestPtr &req,
198 const std::string &cookie);
199 //$upstream_http_[header_name]
200 static void outputRespHeader(trantor::LogStream &stream,
201 const drogon::HttpResponsePtr &resp,
202 const std::string &headerName);
203 //$status
204 static void outputStatusString(trantor::LogStream &,
205 const drogon::HttpRequestPtr &,
206 const drogon::HttpResponsePtr &);
207 //$status_code
208 static void outputStatusCode(trantor::LogStream &,
209 const drogon::HttpRequestPtr &,
210 const drogon::HttpResponsePtr &);
211 //$processing_time
212 static void outputProcessingTime(trantor::LogStream &,
213 const drogon::HttpRequestPtr &,
214 const drogon::HttpResponsePtr &);
215 //$upstream_http_content-type $upstream_http_content_type
216 static void outputRespContentType(trantor::LogStream &,
217 const drogon::HttpRequestPtr &,
218 const drogon::HttpResponsePtr &);
219};
220} // namespace plugin
221} // namespace drogon
The reflection base class for plugins.
Definition Plugin.h:132
void initAndStart(const Json::Value &config) override
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23