Zappy Server
C++ game server: world, rules, scheduler, network
Loading...
Searching...
No Matches
FileSink.cpp
Go to the documentation of this file.
2
3#include <chrono>
4#include <ctime>
5#include <filesystem>
6#include <sstream>
7
8FileSink::FileSink(const std::string& path, LogLevel minLevel)
9 : _out(path, std::ios::out | std::ios::trunc), _minLevel(minLevel)
10{
11}
12
13std::unique_ptr<FileSink> FileSink::forRun(const std::string& tag, LogLevel minLevel)
14{
15 std::time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
16 std::tm tm{};
17 localtime_r(&now, &tm);
18 char stamp[32];
19 std::strftime(stamp, sizeof(stamp), "%Y-%m-%d_%H-%M-%S", &tm);
20
21 std::error_code ec;
22 std::filesystem::create_directories("server/logs", ec);
23
24 std::ostringstream path;
25 path << "server/logs/" << tag << "_" << stamp << ".log";
26 return std::make_unique<FileSink>(path.str(), minLevel);
27}
28
29void FileSink::write(LogLevel level, const std::string& line)
30{
31 if (level < _minLevel || !_out.is_open()) return;
32 _out << line << "\n";
33 _out.flush();
34}
LogLevel
Definition ILogSink.hpp:5
void write(LogLevel level, const std::string &line) override
Write one already-formatted line if level passes the sink's threshold.
Definition FileSink.cpp:29
LogLevel _minLevel
Definition FileSink.hpp:24
std::ofstream _out
Definition FileSink.hpp:23
static std::unique_ptr< FileSink > forRun(const std::string &tag, LogLevel minLevel=LogLevel::Debug)
Definition FileSink.cpp:13
FileSink(const std::string &path, LogLevel minLevel=LogLevel::Debug)
Definition FileSink.cpp:8