Webserver/API access is only allowed from these subnets.
+.. _setting-webserver-loglevel:
+
+``webserver-loglevel``
+----------------------
+.. versionadded:: 4.2.0
+
+- String, one of "none", "normal", "detailed"
+
+The amount of logging the webserver must do. "none" means no useful webserver information will be logged.
+When set to "normal", the webserver will log a line per request that should be familiar::
+
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> 127.0.0.1:55376 "GET /api/v1/servers/localhost/bla HTTP/1.1" 404 196
+
+When set to "detailed", all information about the request and response are logged::
+
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Request Details:
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Headers:
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> accept-encoding: gzip, deflate
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> accept-language: en-US,en;q=0.5
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> connection: keep-alive
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> dnt: 1
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> host: 127.0.0.1:8081
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> upgrade-insecure-requests: 1
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> No body
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Response details:
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Headers:
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Connection: close
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Content-Length: 49
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Content-Type: text/html; charset=utf-8
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Server: PowerDNS/0.0.15896.0.gaba8bab3ab
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> Full body:
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> <!html><title>Not Found</title><h1>Not Found</h1>
+ [webserver] <e235780e-a5cf-415e-9326-9d33383e739e> 127.0.0.1:55376 "GET /api/v1/servers/localhost/bla HTTP/1.1" 404 196
+
+The value between the hooks is a UUID that is generated for each request. This can be used to find all lines related to a single request.
+
+.. note::
+ The webserver logs these line on the NOTICE level. The :ref:`settings-loglevel` seting must be 5 or higher for these lines to end up in the log.
+
.. _setting-webserver-password:
``webserver-password``
}
if (d_loglevel >= WebServer::LogLevel::Detailed) {
- g_log<<Logger::Info<<logprefix<<"Request Details:"<<endl;
+ g_log<<Logger::Notice<<logprefix<<"Request Details:"<<endl;
bool first = true;
for (const auto& r : req.getvars) {
if (first) {
first = false;
- g_log<<Logger::Info<<logprefix<<" GET params:"<<endl;
+ g_log<<Logger::Notice<<logprefix<<" GET params:"<<endl;
}
- g_log<<Logger::Info<<logprefix<<" "<<r.first<<": "<<r.second<<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::Info<<logprefix<<" POST params:"<<endl;
+ g_log<<Logger::Notice<<logprefix<<" POST params:"<<endl;
}
- g_log<<Logger::Info<<logprefix<<" "<<r.first<<": "<<r.second<<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::Info<<logprefix<<" Headers:"<<endl;
+ g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
}
- g_log<<Logger::Info<<logprefix<<" "<<h.first<<": "<<h.second<<endl;
+ g_log<<Logger::Notice<<logprefix<<" "<<h.first<<": "<<h.second<<endl;
}
if (req.body.empty()) {
- g_log<<Logger::Info<<logprefix<<" No body"<<endl;
+ g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
} else {
- g_log<<Logger::Info<<logprefix<<" Full body: "<<endl;
- g_log<<Logger::Info<<logprefix<<" "<<req.body<<endl;
+ g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
+ g_log<<Logger::Notice<<logprefix<<" "<<req.body<<endl;
}
}
reply = ss.str();
if (d_loglevel >= WebServer::LogLevel::Detailed) {
- g_log<<Logger::Info<<logprefix<<"Response details:"<<endl;
+ g_log<<Logger::Notice<<logprefix<<"Response details:"<<endl;
bool first = true;
for (const auto& h : resp.headers) {
if (first) {
first = false;
- g_log<<Logger::Info<<logprefix<<" Headers:"<<endl;
+ g_log<<Logger::Notice<<logprefix<<" Headers:"<<endl;
}
- g_log<<Logger::Info<<logprefix<<" "<<h.first<<": "<<h.second<<endl;
+ g_log<<Logger::Notice<<logprefix<<" "<<h.first<<": "<<h.second<<endl;
}
if (resp.body.empty()) {
- g_log<<Logger::Info<<logprefix<<" No body"<<endl;
+ g_log<<Logger::Notice<<logprefix<<" No body"<<endl;
} else {
- g_log<<Logger::Info<<logprefix<<" Full body: "<<endl;
- g_log<<Logger::Info<<logprefix<<" "<<resp.body<<endl;
+ g_log<<Logger::Notice<<logprefix<<" Full body: "<<endl;
+ g_log<<Logger::Notice<<logprefix<<" "<<resp.body<<endl;
}
}
}
if (d_loglevel >= WebServer::LogLevel::Normal) {
- g_log<<Logger::Info<<logprefix<<remote<<" \""<<req.method<<" "<<req.url.path<<" HTTP/"<<req.versionStr(req.version)<<"\" "<<resp.status<<" "<<reply.size()<<endl;
+ g_log<<Logger::Notice<<logprefix<<remote<<" \""<<req.method<<" "<<req.url.path<<" HTTP/"<<req.versionStr(req.version)<<"\" "<<resp.status<<" "<<reply.size()<<endl;
}
}