nghttpx: Optimize accesslog write
This commit is contained in:
parent
506de55475
commit
959d378f2a
|
@ -835,25 +835,27 @@ void ClientHandler::write_accesslog(Downstream *downstream) {
|
|||
upstream_accesslog(
|
||||
get_config()->accesslog_format,
|
||||
LogSpec{
|
||||
downstream, ipaddr_.c_str(), http2::to_method_string(req.method),
|
||||
downstream, ipaddr_, http2::to_method_string(req.method),
|
||||
|
||||
req.method == HTTP_CONNECT
|
||||
? req.authority.c_str()
|
||||
? req.authority
|
||||
: (get_config()->http2_proxy || get_config()->client_proxy)
|
||||
? construct_absolute_request_uri(req).c_str()
|
||||
: req.path.empty() ? req.method == HTTP_OPTIONS ? "*" : "-"
|
||||
: req.path.c_str(),
|
||||
? construct_absolute_request_uri(req)
|
||||
: req.path.empty()
|
||||
? req.method == HTTP_OPTIONS
|
||||
? StringAdaptor::from_lit("*")
|
||||
: StringAdaptor::from_lit("-")
|
||||
: req.path,
|
||||
|
||||
alpn_.c_str(),
|
||||
nghttp2::ssl::get_tls_session_info(&tls_info, conn_.tls.ssl),
|
||||
alpn_, nghttp2::ssl::get_tls_session_info(&tls_info, conn_.tls.ssl),
|
||||
|
||||
std::chrono::system_clock::now(), // time_now
|
||||
downstream->get_request_start_time(), // request_start_time
|
||||
std::chrono::high_resolution_clock::now(), // request_end_time
|
||||
|
||||
req.http_major, req.http_minor, resp.http_status,
|
||||
downstream->response_sent_body_length, port_.c_str(),
|
||||
get_config()->port, get_config()->pid,
|
||||
downstream->response_sent_body_length, port_, get_config()->port,
|
||||
get_config()->pid,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -863,21 +865,20 @@ void ClientHandler::write_accesslog(int major, int minor, unsigned int status,
|
|||
auto highres_now = std::chrono::high_resolution_clock::now();
|
||||
nghttp2::ssl::TLSSessionInfo tls_info;
|
||||
|
||||
upstream_accesslog(get_config()->accesslog_format,
|
||||
LogSpec{
|
||||
nullptr, ipaddr_.c_str(),
|
||||
"-", // method
|
||||
"-", // path,
|
||||
alpn_.c_str(), nghttp2::ssl::get_tls_session_info(
|
||||
&tls_info, conn_.tls.ssl),
|
||||
time_now,
|
||||
highres_now, // request_start_time TODO is
|
||||
// there a better value?
|
||||
highres_now, // request_end_time
|
||||
major, minor, // major, minor
|
||||
status, body_bytes_sent, port_.c_str(),
|
||||
get_config()->port, get_config()->pid,
|
||||
});
|
||||
upstream_accesslog(
|
||||
get_config()->accesslog_format,
|
||||
LogSpec{
|
||||
nullptr, ipaddr_,
|
||||
StringAdaptor::from_lit("-"), // method
|
||||
StringAdaptor::from_lit("-"), // path,
|
||||
alpn_, nghttp2::ssl::get_tls_session_info(&tls_info, conn_.tls.ssl),
|
||||
time_now,
|
||||
highres_now, // request_start_time TODO is
|
||||
// there a better value?
|
||||
highres_now, // request_end_time
|
||||
major, minor, // major, minor
|
||||
status, body_bytes_sent, port_, get_config()->port, get_config()->pid,
|
||||
});
|
||||
}
|
||||
|
||||
ClientHandler::ReadBuf *ClientHandler::get_rb() { return &rb_; }
|
||||
|
|
|
@ -182,6 +182,14 @@ std::pair<OutputIterator, size_t> copy(const std::string &src, size_t avail,
|
|||
}
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
template <typename OutputIterator>
|
||||
std::pair<OutputIterator, size_t> copy(const StringAdaptor &src, size_t avail,
|
||||
OutputIterator oitr) {
|
||||
return copy(src.c_str(), src.size(), avail, oitr);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
template <size_t N, typename OutputIterator>
|
||||
std::pair<OutputIterator, size_t> copy_l(const char(&src)[N], size_t avail,
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
|
||||
#include "shrpx_log_config.h"
|
||||
#include "ssl.h"
|
||||
#include "template.h"
|
||||
|
||||
using namespace nghttp2;
|
||||
|
||||
#define ENABLE_LOG 1
|
||||
|
||||
|
@ -139,10 +142,10 @@ struct LogFragment {
|
|||
|
||||
struct LogSpec {
|
||||
Downstream *downstream;
|
||||
const char *remote_addr;
|
||||
const char *method;
|
||||
const char *path;
|
||||
const char *alpn;
|
||||
StringAdaptor remote_addr;
|
||||
StringAdaptor method;
|
||||
StringAdaptor path;
|
||||
StringAdaptor alpn;
|
||||
const nghttp2::ssl::TLSSessionInfo *tls_info;
|
||||
std::chrono::system_clock::time_point time_now;
|
||||
std::chrono::high_resolution_clock::time_point request_start_time;
|
||||
|
@ -150,7 +153,7 @@ struct LogSpec {
|
|||
int major, minor;
|
||||
unsigned int status;
|
||||
int64_t body_bytes_sent;
|
||||
const char *remote_port;
|
||||
StringAdaptor remote_port;
|
||||
uint16_t server_port;
|
||||
pid_t pid;
|
||||
};
|
||||
|
|
|
@ -254,6 +254,11 @@ struct StringAdaptor {
|
|||
StringAdaptor(const T &s)
|
||||
: base(s.c_str()), len(s.size()) {}
|
||||
StringAdaptor(const char *s) : base(s), len(strlen(s)) {}
|
||||
StringAdaptor(const char *s, size_t n) : base(s), len(n) {}
|
||||
|
||||
template <size_t N> static StringAdaptor from_lit(const char(&s)[N]) {
|
||||
return StringAdaptor(s, N - 1);
|
||||
}
|
||||
|
||||
const char *c_str() const { return base; }
|
||||
size_t size() const { return len; }
|
||||
|
|
Loading…
Reference in New Issue