Merge pull request #2188 from lioncash/log-static

logging/backend: Move CreateEntry into the Impl class. Relocate local static to a class variable
This commit is contained in:
bunnei 2019-03-04 13:46:01 -05:00 committed by GitHub
commit 6ad66acce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 29 deletions

View File

@ -39,8 +39,10 @@ public:
Impl(Impl const&) = delete; Impl(Impl const&) = delete;
const Impl& operator=(Impl const&) = delete; const Impl& operator=(Impl const&) = delete;
void PushEntry(Entry e) { void PushEntry(Class log_class, Level log_level, const char* filename, unsigned int line_num,
message_queue.Push(std::move(e)); const char* function, std::string message) {
message_queue.Push(
CreateEntry(log_class, log_level, filename, line_num, function, std::move(message)));
} }
void AddBackend(std::unique_ptr<Backend> backend) { void AddBackend(std::unique_ptr<Backend> backend) {
@ -108,11 +110,30 @@ private:
backend_thread.join(); backend_thread.join();
} }
Entry CreateEntry(Class log_class, Level log_level, const char* filename, unsigned int line_nr,
const char* function, std::string message) const {
using std::chrono::duration_cast;
using std::chrono::steady_clock;
Entry entry;
entry.timestamp =
duration_cast<std::chrono::microseconds>(steady_clock::now() - time_origin);
entry.log_class = log_class;
entry.log_level = log_level;
entry.filename = Common::TrimSourcePath(filename);
entry.line_num = line_nr;
entry.function = function;
entry.message = std::move(message);
return entry;
}
std::mutex writing_mutex; std::mutex writing_mutex;
std::thread backend_thread; std::thread backend_thread;
std::vector<std::unique_ptr<Backend>> backends; std::vector<std::unique_ptr<Backend>> backends;
Common::MPSCQueue<Log::Entry> message_queue; Common::MPSCQueue<Log::Entry> message_queue;
Filter filter; Filter filter;
std::chrono::steady_clock::time_point time_origin{std::chrono::steady_clock::now()};
}; };
void ConsoleBackend::Write(const Entry& entry) { void ConsoleBackend::Write(const Entry& entry) {
@ -271,25 +292,6 @@ const char* GetLevelName(Level log_level) {
#undef LVL #undef LVL
} }
Entry CreateEntry(Class log_class, Level log_level, const char* filename, unsigned int line_nr,
const char* function, std::string message) {
using std::chrono::duration_cast;
using std::chrono::steady_clock;
static steady_clock::time_point time_origin = steady_clock::now();
Entry entry;
entry.timestamp = duration_cast<std::chrono::microseconds>(steady_clock::now() - time_origin);
entry.log_class = log_class;
entry.log_level = log_level;
entry.filename = Common::TrimSourcePath(filename);
entry.line_num = line_nr;
entry.function = function;
entry.message = std::move(message);
return entry;
}
void SetGlobalFilter(const Filter& filter) { void SetGlobalFilter(const Filter& filter) {
Impl::Instance().SetGlobalFilter(filter); Impl::Instance().SetGlobalFilter(filter);
} }
@ -314,9 +316,7 @@ void FmtLogMessageImpl(Class log_class, Level log_level, const char* filename,
if (!filter.CheckMessage(log_class, log_level)) if (!filter.CheckMessage(log_class, log_level))
return; return;
Entry entry = instance.PushEntry(log_class, log_level, filename, line_num, function,
CreateEntry(log_class, log_level, filename, line_num, function, fmt::vformat(format, args)); fmt::vformat(format, args));
instance.PushEntry(std::move(entry));
} }
} // namespace Log } // namespace Log

View File

@ -135,10 +135,6 @@ const char* GetLogClassName(Class log_class);
*/ */
const char* GetLevelName(Level log_level); const char* GetLevelName(Level log_level);
/// Creates a log entry by formatting the given source location, and message.
Entry CreateEntry(Class log_class, Level log_level, const char* filename, unsigned int line_nr,
const char* function, std::string message);
/** /**
* The global filter will prevent any messages from even being processed if they are filtered. Each * The global filter will prevent any messages from even being processed if they are filtered. Each
* backend can have a filter, but if the level is lower than the global filter, the backend will * backend can have a filter, but if the level is lower than the global filter, the backend will