From de5c600092d612f34defd0e9d441fa7706170a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD?= Date: Thu, 28 Mar 2024 18:26:21 +0300 Subject: [PATCH] add logger --- CMakeLists.txt | 4 +++- main.cpp | 5 +++++ src/Logger.cpp | 20 +++++++++++++++++ src/Logger.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/Logger.cpp create mode 100644 src/Logger.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 12b935f..9c6f5fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,8 @@ add_executable(hello_async src/handlers/GetMapByIdHandler.h src/handlers/GetStaticAssetHandler.cpp src/handlers/GetStaticAssetHandler.h - src/routes.h) + src/routes.h + src/Logger.h + src/Logger.cpp) target_include_directories(hello_async PUBLIC ${Boost_INCLUDE_DIR}) target_link_libraries(hello_async PRIVATE Threads::Threads Boost::filesystem Boost::json) diff --git a/main.cpp b/main.cpp index d90bb03..ae6ebc3 100644 --- a/main.cpp +++ b/main.cpp @@ -8,8 +8,10 @@ #include #include #include +#include #include "src/http_server.h" +#include "src/Logger.h" #include "src/routes.h" #include "src/handlers/GetMapsHandler.h" #include "src/handlers/GetMapByIdHandler.h" @@ -90,6 +92,9 @@ void RunWorkers(unsigned n, const Fn& fn) int main() { + Logger::GetInstance().SetOutStream(cout); + Logger::GetInstance().Log("Qwerty"s, 2, 3, 14); + const unsigned num_threads = std::thread::hardware_concurrency(); net::io_context ioc(num_threads); diff --git a/src/Logger.cpp b/src/Logger.cpp new file mode 100644 index 0000000..e94001f --- /dev/null +++ b/src/Logger.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + +#include "Logger.h" + +namespace http_server +{ +Logger& Logger::GetInstance() +{ + static Logger s_Instance; + + return s_Instance; +} + +void Logger::SetOutStream(ostream& stream) +{ + stream_ptr_ = &stream; +} +} diff --git a/src/Logger.h b/src/Logger.h new file mode 100644 index 0000000..f3f5479 --- /dev/null +++ b/src/Logger.h @@ -0,0 +1,59 @@ +#pragma once +#include "sdk.h" +// boost.beast будет использовать std::string_view вместо boost::string_view +#define BOOST_BEAST_USE_STD_STRING_VIEW + +#include + +#include "session.h" + +namespace http_server +{ +using namespace std; + +class Logger +{ + mutex mtx_; + ostream* stream_ptr_; + + Logger() = default; + + public: + static Logger& GetInstance(); + + void SetOutStream(ostream& stream); + + auto GetTimeStamp() + { + const auto now = std::chrono::system_clock::now(); + const auto t_c = std::chrono::system_clock::to_time_t(now); + + return std::put_time(std::localtime(&t_c), "%F %T"); + } + + template + void Log(First fst, Args... args) + { + lock_guard guard(mtx_); + + *stream_ptr_ << GetTimeStamp() << ": "s; + + LogImpl(fst, args...); + } + + private: + template + void LogImpl(First fst, Args... args) + { + *stream_ptr_ << fst; + + LogImpl(args...); + } + + template + void LogImpl(First fst) + { + *stream_ptr_ << fst; + } +}; +} // namespace http_server \ No newline at end of file