add logger
This commit is contained in:
parent
6c0b34a199
commit
de5c600092
|
@ -37,6 +37,8 @@ add_executable(hello_async
|
||||||
src/handlers/GetMapByIdHandler.h
|
src/handlers/GetMapByIdHandler.h
|
||||||
src/handlers/GetStaticAssetHandler.cpp
|
src/handlers/GetStaticAssetHandler.cpp
|
||||||
src/handlers/GetStaticAssetHandler.h
|
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_include_directories(hello_async PUBLIC ${Boost_INCLUDE_DIR})
|
||||||
target_link_libraries(hello_async PRIVATE Threads::Threads Boost::filesystem Boost::json)
|
target_link_libraries(hello_async PRIVATE Threads::Threads Boost::filesystem Boost::json)
|
||||||
|
|
5
main.cpp
5
main.cpp
|
@ -8,8 +8,10 @@
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "src/http_server.h"
|
#include "src/http_server.h"
|
||||||
|
#include "src/Logger.h"
|
||||||
#include "src/routes.h"
|
#include "src/routes.h"
|
||||||
#include "src/handlers/GetMapsHandler.h"
|
#include "src/handlers/GetMapsHandler.h"
|
||||||
#include "src/handlers/GetMapByIdHandler.h"
|
#include "src/handlers/GetMapByIdHandler.h"
|
||||||
|
@ -90,6 +92,9 @@ void RunWorkers(unsigned n, const Fn& fn)
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
Logger::GetInstance().SetOutStream(cout);
|
||||||
|
Logger::GetInstance().Log("Qwerty"s, 2, 3, 14);
|
||||||
|
|
||||||
const unsigned num_threads = std::thread::hardware_concurrency();
|
const unsigned num_threads = std::thread::hardware_concurrency();
|
||||||
|
|
||||||
net::io_context ioc(num_threads);
|
net::io_context ioc(num_threads);
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
Loading…
Reference in New Issue