// file : web/apache/log.hxx -*- C++ -*- // copyright : Copyright (c) 2014-2019 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef WEB_APACHE_LOG_HXX #define WEB_APACHE_LOG_HXX #include <httpd.h> // request_rec, server_rec #include <http_log.h> #include <http_config.h> // module #include <cstdint> // uint64_t #include <algorithm> // min() #include <web/module.hxx> namespace web { namespace apache { class log: public web::log { public: log (server_rec* s, const ::module* m) noexcept : server_ (s), module_ (m) {} virtual void write (const char* msg) {write (APLOG_ERR, msg);} // Apache-specific interface. // void write (int level, const char* msg) const noexcept { write (nullptr, 0, nullptr, level, msg); } void write (const char* file, std::uint64_t line, const char* func, int level, const char* msg) const noexcept { if (file && *file) file = nullptr; // Skip file/line placeholder from log line. level = std::min (level, APLOG_TRACE8); if (func) ap_log_error (file, line, module_->module_index, level, 0, server_, "[%s]: %s", func, msg); else // Skip function name placeholder from log line. // ap_log_error (file, line, module_->module_index, level, 0, server_, ": %s", msg); } private: server_rec* server_; const ::module* module_; // Apache module. }; } } #endif // WEB_APACHE_LOG_HXX