cpp_backend/src/Logger.h

59 lines
1.1 KiB
C++

#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 << '\n';
}
};
} // namespace http_server