add logger

This commit is contained in:
Антон 2024-03-28 18:26:21 +03:00
parent 6c0b34a199
commit de5c600092
4 changed files with 87 additions and 1 deletions

View File

@ -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)

View File

@ -8,8 +8,10 @@
#include <thread>
#include <vector>
#include <fstream>
#include <iostream>
#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);

20
src/Logger.cpp Normal file
View File

@ -0,0 +1,20 @@
#include <chrono>
#include <iomanip>
#include <ctime>
#include "Logger.h"
namespace http_server
{
Logger& Logger::GetInstance()
{
static Logger s_Instance;
return s_Instance;
}
void Logger::SetOutStream(ostream& stream)
{
stream_ptr_ = &stream;
}
}

59
src/Logger.h Normal file
View File

@ -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 <mutex>
#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<class First, class... Args>
void Log(First fst, Args... args)
{
lock_guard guard(mtx_);
*stream_ptr_ << GetTimeStamp() << ": "s;
LogImpl(fst, args...);
}
private:
template<class First, class... Args>
void LogImpl(First fst, Args... args)
{
*stream_ptr_ << fst;
LogImpl(args...);
}
template<class First>
void LogImpl(First fst)
{
*stream_ptr_ << fst;
}
};
} // namespace http_server