59 lines
1.1 KiB
C++
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
|