diff options
author | crupest <crupest@outlook.com> | 2019-12-12 19:53:17 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-12-12 19:53:17 +0800 |
commit | e69911a8b161b81ce3f7b209175766da2b7b3d4b (patch) | |
tree | 76b1f4b6f9f5ad6111578771be783ee456aeb912 /src/common/logger.cpp | |
parent | 154b5b838edfdcef93cd0a33c013ad7f5f9d7337 (diff) | |
download | cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.tar.gz cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.tar.bz2 cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.zip |
...
Diffstat (limited to 'src/common/logger.cpp')
-rw-r--r-- | src/common/logger.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/common/logger.cpp b/src/common/logger.cpp index 25223d91..6c1422f9 100644 --- a/src/common/logger.cpp +++ b/src/common/logger.cpp @@ -2,6 +2,7 @@ #include "cru/common/format.hpp" +#include <array> #include <cstdlib> #include <ctime> #include <memory> @@ -11,7 +12,7 @@ namespace cru::log { namespace { Logger *CreateLogger() { const auto logger = new Logger(); - logger->AddSource(new StdioLoggerSource()); + logger->AddSource(std::make_unique<StdioLogSource>()); return logger; } } // namespace @@ -21,45 +22,45 @@ Logger *Logger::GetInstance() { return logger.get(); } -Logger::~Logger() { - for (const auto i : sources_) { - delete i; - } +void Logger::AddSource(std::unique_ptr<ILogSource> source) { + sources_.push_back(std::move(source)); } -void Logger::AddSource(ILoggerSource *source) { sources_.push_back(source); } - -void Logger::RemoveSource(ILoggerSource *source) { sources_.remove(source); } +void Logger::RemoveSource(ILogSource *source) { + sources_.remove_if([source](const std::unique_ptr<ILogSource> &s) { + return s.get() == source; + }); +} namespace { -std::wstring_view LogLevelToString(LogLevel level) { +std::string_view LogLevelToString(LogLevel level) { switch (level) { case LogLevel::Debug: - return L"DEBUG"; + return "DEBUG"; case LogLevel::Info: - return L"INFO"; + return "INFO"; case LogLevel::Warn: - return L"WARN"; + return "WARN"; case LogLevel::Error: - return L"ERROR"; + return "ERROR"; default: std::abort(); } } } // namespace -void Logger::Log(LogLevel level, const std::wstring_view &s) { +void Logger::Log(LogLevel level, const std::string_view &s) { #ifndef CRU_DEBUG if (level == LogLevel::Debug) { return; } #endif - for (const auto source : sources_) { + for (const auto &source : sources_) { auto now = std::time(nullptr); - wchar_t buffer[50]; - std::wcsftime(buffer, 50, L"%c", std::localtime(&now)); + std::array<char, 50> buffer; + std::strftime(buffer.data(), 50, "%c", std::localtime(&now)); - source->Write(level, util::Format(L"[{}] {}: {}\n", buffer, + source->Write(level, util::Format("[{}] {}: {}\n", buffer.data(), LogLevelToString(level), s)); } } |