Skip to content
Snippets Groups Projects
Commit 0aa44e23 authored by Emmanuel Gil Peyrot's avatar Emmanuel Gil Peyrot
Browse files

Logging: check for filter before sending to the queue, to skip all heavy...

Logging: check for filter before sending to the queue, to skip all heavy formatting on the other thread.
parent 53ba65db
No related branches found
No related tags found
No related merge requests found
......@@ -22,7 +22,8 @@
int __cdecl main(int argc, char **argv) {
std::shared_ptr<Log::Logger> logger = Log::InitGlobalLogger();
Log::Filter log_filter(Log::Level::Debug);
std::thread logging_thread(Log::TextLoggingLoop, logger, &log_filter);
Log::SetFilter(&log_filter);
std::thread logging_thread(Log::TextLoggingLoop, logger);
SCOPE_EXIT({
logger->Close();
logging_thread.join();
......
......@@ -310,7 +310,8 @@ int __cdecl main(int argc, char* argv[])
{
std::shared_ptr<Log::Logger> logger = Log::InitGlobalLogger();
Log::Filter log_filter(Log::Level::Info);
std::thread logging_thread(Log::TextLoggingLoop, logger, &log_filter);
Log::SetFilter(&log_filter);
std::thread logging_thread(Log::TextLoggingLoop, logger);
SCOPE_EXIT({
logger->Close();
logging_thread.join();
......
......@@ -135,9 +135,18 @@ Entry CreateEntry(Class log_class, Level log_level,
return std::move(entry);
}
static Filter* filter;
void SetFilter(Filter* new_filter) {
filter = new_filter;
}
void LogMessage(Class log_class, Level log_level,
const char* filename, unsigned int line_nr, const char* function,
const char* format, ...) {
if (!filter->CheckMessage(log_class, log_level))
return;
va_list args;
va_start(args, format);
Entry entry = CreateEntry(log_class, log_level,
......
......@@ -10,6 +10,7 @@
#include "common/concurrent_ring_buffer.h"
#include "common/logging/filter.h"
#include "common/logging/log.h"
namespace Log {
......@@ -131,4 +132,6 @@ Entry CreateEntry(Class log_class, Level log_level,
/// Initializes the default Logger.
std::shared_ptr<Logger> InitGlobalLogger();
void SetFilter(Filter* filter);
}
......@@ -2,6 +2,8 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include <array>
#include <string>
......
......@@ -11,7 +11,6 @@
#endif
#include "common/logging/backend.h"
#include "common/logging/filter.h"
#include "common/logging/log.h"
#include "common/logging/text_formatter.h"
......@@ -116,7 +115,7 @@ void PrintColoredMessage(const Entry& entry) {
#endif
}
void TextLoggingLoop(std::shared_ptr<Logger> logger, const Filter* filter) {
void TextLoggingLoop(std::shared_ptr<Logger> logger) {
std::array<Entry, 256> entry_buffer;
while (true) {
......@@ -126,9 +125,7 @@ void TextLoggingLoop(std::shared_ptr<Logger> logger, const Filter* filter) {
}
for (size_t i = 0; i < num_entries; ++i) {
const Entry& entry = entry_buffer[i];
if (filter->CheckMessage(entry.log_class, entry.log_level)) {
PrintColoredMessage(entry);
}
PrintColoredMessage(entry);
}
}
}
......
......@@ -11,7 +11,6 @@ namespace Log {
class Logger;
struct Entry;
class Filter;
/**
* Attempts to trim an arbitrary prefix from `path`, leaving only the part starting at `root`. It's
......@@ -36,6 +35,6 @@ void PrintColoredMessage(const Entry& entry);
* Logging loop that repeatedly reads messages from the provided logger and prints them to the
* console. It is the baseline barebones log outputter.
*/
void TextLoggingLoop(std::shared_ptr<Logger> logger, const Filter* filter);
void TextLoggingLoop(std::shared_ptr<Logger> logger);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment