ceph/0006-src-rgw-rgw_asio_front...

65 lines
2.7 KiB
Diff

--- ceph-15.2.8/src/rgw/rgw_asio_frontend.cc.orig 2020-12-16 12:29:50.000000000 -0500
+++ ceph-15.2.8/src/rgw/rgw_asio_frontend.cc 2021-01-04 18:20:49.156104233 -0500
@@ -2,6 +2,7 @@
// vim: ts=8 sw=2 smarttab ft=cpp
#include <atomic>
+#include <ctime>
#include <thread>
#include <vector>
@@ -138,6 +139,29 @@
return out << h.quote << p->value() << h.quote;
}
+// log fractional seconds in milliseconds
+struct log_ms_remainder {
+ ceph::coarse_real_time t;
+ log_ms_remainder(ceph::coarse_real_time t) : t(t) {}
+};
+std::ostream& operator<<(std::ostream& out, const log_ms_remainder& m) {
+ using namespace std::chrono;
+ return out << std::setfill('0') << std::setw(3)
+ << duration_cast<milliseconds>(m.t.time_since_epoch()).count() % 1000;
+}
+
+// log time in apache format: day/month/year:hour:minute:second zone
+struct log_apache_time {
+ ceph::coarse_real_time t;
+ log_apache_time(ceph::coarse_real_time t) : t(t) {}
+};
+std::ostream& operator<<(std::ostream& out, const log_apache_time& a) {
+ const auto t = ceph::coarse_real_clock::to_time_t(a.t);
+ const auto local = std::localtime(&t);
+ return out << std::put_time(local, "%d/%b/%Y:%T.") << log_ms_remainder{a.t}
+ << std::put_time(local, " %z");
+};
+
using SharedMutex = ceph::async::SharedMutex<boost::asio::io_context::executor_type>;
template <typename Stream>
@@ -228,16 +252,20 @@
RGWRestfulIO client(cct, &real_client_io);
auto y = optional_yield{context, yield};
int http_ret = 0;
+ string user = "-";
+ const auto started = ceph::coarse_real_clock::now();
+
process_request(env.store, env.rest, &req, env.uri_prefix,
*env.auth_registry, &client, env.olog, y,
scheduler, &http_ret);
if (cct->_conf->subsys.should_gather(dout_subsys, 1)) {
// access log line elements begin per Apache Combined Log Format with additions following
- const auto now = ceph::coarse_real_clock::now();
- using ceph::operator<<; // for coarse_real_time
+ // const auto now = ceph::coarse_real_clock::now();
+ // using ceph::operator<<; // for coarse_real_time
ldout(cct, 1) << "beast: " << hex << &req << dec << ": "
- << remote_endpoint.address() << " - - [" << now << "] \""
+ // << remote_endpoint.address() << " - - [" << now << "] \""
+ << remote_endpoint.address() << " - " << user << " [" << log_apache_time{started} << "] \""
<< message.method_string() << ' ' << message.target() << ' '
<< http_version{message.version()} << "\" " << http_ret << ' '
<< client.get_bytes_sent() + client.get_bytes_received() << ' '