]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Webserver: add log{Request,Response} functions and use them
authorPieter Lexis <pieter.lexis@powerdns.com>
Thu, 14 Feb 2019 10:42:50 +0000 (11:42 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Thu, 14 Feb 2019 10:42:50 +0000 (11:42 +0100)
pdns/webserver.cc
pdns/webserver.hh
pdns/ws-recursor.cc

index 2b813cfc04b1e12cbc24cb5c9bd46193d8427a0c..3028c8d9845bf95a581a4cf0938a2368682cdf16 100644 (file)
@@ -278,6 +278,67 @@ void WebServer::handleRequest(HttpRequest& req, HttpResponse& resp) const
   }
 }
 
+void WebServer::logRequest(const HttpRequest& req, const ComboAddress& remote) const {
+  if (d_loglevel >= WebServer::LogLevel::Detailed) {
+    auto logprefix = req.logprefix;
+    g_log<<Logger::Notice<<logprefix<<"Request details:"<<endl;
+
+    bool first = true;
+    for (const auto& r : req.getvars) {
+      if (first) {
+        first = false;
+        g_log<<Logger::Notice<<logprefix<<" GET params:"<<endl;
+      }
+      g_log<<Logger::Notice<<logprefix<<"  "<<r.first<<": "<<r.second<<endl;
+    }
+
+    first = true;
+    for (const auto& r : req.postvars) {
+      if (first) {
+        first = false;
+        g_log<<Logger::Notice<<logprefix<<" POST params:"<<endl;
+      }
+      g_log<<Logger::Notice<<logprefix<<"  "<<r.first<<": "<<r.second<<endl;
+    }
+
+    first = true;
+    for (const auto& h : req.headers) {
+      if (first) {
+        first = false;
+        g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
+      }
+      g_log<<Logger::Notice<<logprefix<<"  "<<h.first<<": "<<h.second<<endl;
+    }
+
+    if (req.body.empty()) {
+      g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
+    } else {
+      g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
+      g_log<<Logger::Notice<<logprefix<<"  "<<req.body<<endl;
+    }
+  }
+}
+
+void WebServer::logResponse(const HttpResponse& resp, const ComboAddress& remote, const string& logprefix) const {
+  if (d_loglevel >= WebServer::LogLevel::Detailed) {
+    g_log<<Logger::Notice<<logprefix<<"Response details:"<<endl;
+    bool first = true;
+    for (const auto& h : resp.headers) {
+      if (first) {
+        first = false;
+        g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
+      }
+      g_log<<Logger::Notice<<logprefix<<"  "<<h.first<<": "<<h.second<<endl;
+    }
+    if (resp.body.empty()) {
+      g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
+    } else {
+      g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
+      g_log<<Logger::Notice<<logprefix<<"  "<<resp.body<<endl;
+    }
+  }
+}
+
 void WebServer::serveConnection(std::shared_ptr<Socket> client) const {
   const string logprefix = d_logprefix + "<" + to_string(getUniqueID()) + "> ";
 
@@ -314,66 +375,14 @@ void WebServer::serveConnection(std::shared_ptr<Socket> client) const {
       client->getRemote(remote);
     }
 
-    if (d_loglevel >= WebServer::LogLevel::Detailed) {
-      g_log<<Logger::Notice<<logprefix<<"Request Details:"<<endl;
-
-      bool first = true;
-      for (const auto& r : req.getvars) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" GET params:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<r.first<<": "<<r.second<<endl;
-      }
-
-      first = true;
-      for (const auto& r : req.postvars) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" POST params:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<r.first<<": "<<r.second<<endl;
-      }
-      first = true;
-
-      for (const auto& h : req.headers) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<h.first<<": "<<h.second<<endl;
-      }
-
-      if (req.body.empty()) {
-        g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
-      } else {
-        g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
-        g_log<<Logger::Notice<<logprefix<<"  "<<req.body<<endl;
-      }
-    }
+    logRequest(req, remote);
 
     WebServer::handleRequest(req, resp);
     ostringstream ss;
     resp.write(ss);
     reply = ss.str();
 
-    if (d_loglevel >= WebServer::LogLevel::Detailed) {
-      g_log<<Logger::Notice<<logprefix<<"Response details:"<<endl;
-      bool first = true;
-      for (const auto& h : resp.headers) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<h.first<<": "<<h.second<<endl;
-      }
-      if (resp.body.empty()) {
-        g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
-      } else {
-        g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
-        g_log<<Logger::Notice<<logprefix<<"  "<<resp.body<<endl;
-      }
-    }
+    logResponse(resp, remote, logprefix);
 
     client->writenWithTimeout(reply.c_str(), reply.size(), timeout);
   }
index 69d157f5bd42fd2d4cc1c195e26449858ba5fe90..500f157044fb358e0607b5b067ae3c6343a8d214 100644 (file)
@@ -220,6 +220,8 @@ public:
 
 protected:
   void registerBareHandler(const string& url, HandlerFunction handler);
+  void logRequest(const HttpRequest& req, const ComboAddress& remote) const;
+  void logResponse(const HttpResponse& resp, const ComboAddress& remote, const string& logprefix) const;
 
   virtual std::shared_ptr<Server> createServer() {
     return std::make_shared<Server>(d_listenaddress, d_port);
index 8ae6a1f3f2f457330f811ebecaa3dfdefa286a8a..c0382502505f82ea83a10e2fe74616e8b68e5f29 100644 (file)
@@ -655,66 +655,14 @@ void AsyncWebServer::serveConnection(std::shared_ptr<Socket> client) const {
       client->getRemote(remote);
     }
 
-    if (d_loglevel >= WebServer::LogLevel::Detailed) {
-      g_log<<Logger::Notice<<logprefix<<"Request Details:"<<endl;
-
-      bool first = true;
-      for (const auto& r : req.getvars) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" GET params:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<r.first<<": "<<r.second<<endl;
-      }
-
-      first = true;
-      for (const auto& r : req.postvars) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" POST params:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<r.first<<": "<<r.second<<endl;
-      }
-      first = true;
-
-      for (const auto& h : req.headers) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<h.first<<": "<<h.second<<endl;
-      }
-
-      if (req.body.empty()) {
-        g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
-      } else {
-        g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
-        g_log<<Logger::Notice<<logprefix<<"  "<<req.body<<endl;
-      }
-    }
+    logRequest(req, remote);
 
     WebServer::handleRequest(req, resp);
     ostringstream ss;
     resp.write(ss);
     reply = ss.str();
 
-    if (d_loglevel >= WebServer::LogLevel::Detailed) {
-      g_log<<Logger::Notice<<logprefix<<"Response details:"<<endl;
-      bool first = true;
-      for (const auto& h : resp.headers) {
-        if (first) {
-          first = false;
-          g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
-        }
-        g_log<<Logger::Notice<<logprefix<<"  "<<h.first<<": "<<h.second<<endl;
-      }
-      if (resp.body.empty()) {
-        g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
-      } else {
-        g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
-        g_log<<Logger::Notice<<logprefix<<"  "<<resp.body<<endl;
-      }
-    }
+    logResponse(resp, remote, logprefix);
 
     // now send the reply
     if (asendtcp(reply, client.get()) == -1 || reply.empty()) {