aboutsummaryrefslogtreecommitdiff
path: root/src/common/logger.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-12-12 19:53:17 +0800
committercrupest <crupest@outlook.com>2019-12-12 19:53:17 +0800
commite69911a8b161b81ce3f7b209175766da2b7b3d4b (patch)
tree76b1f4b6f9f5ad6111578771be783ee456aeb912 /src/common/logger.cpp
parent154b5b838edfdcef93cd0a33c013ad7f5f9d7337 (diff)
downloadcru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.tar.gz
cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.tar.bz2
cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.zip
...
Diffstat (limited to 'src/common/logger.cpp')
-rw-r--r--src/common/logger.cpp37
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));
}
}