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 @@ ...@@ -22,7 +22,8 @@
int __cdecl main(int argc, char **argv) { int __cdecl main(int argc, char **argv) {
std::shared_ptr<Log::Logger> logger = Log::InitGlobalLogger(); std::shared_ptr<Log::Logger> logger = Log::InitGlobalLogger();
Log::Filter log_filter(Log::Level::Debug); 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({ SCOPE_EXIT({
logger->Close(); logger->Close();
logging_thread.join(); logging_thread.join();
......
...@@ -310,7 +310,8 @@ int __cdecl main(int argc, char* argv[]) ...@@ -310,7 +310,8 @@ int __cdecl main(int argc, char* argv[])
{ {
std::shared_ptr<Log::Logger> logger = Log::InitGlobalLogger(); std::shared_ptr<Log::Logger> logger = Log::InitGlobalLogger();
Log::Filter log_filter(Log::Level::Info); 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({ SCOPE_EXIT({
logger->Close(); logger->Close();
logging_thread.join(); logging_thread.join();
......
...@@ -135,9 +135,18 @@ Entry CreateEntry(Class log_class, Level log_level, ...@@ -135,9 +135,18 @@ Entry CreateEntry(Class log_class, Level log_level,
return std::move(entry); return std::move(entry);
} }
static Filter* filter;
void SetFilter(Filter* new_filter) {
filter = new_filter;
}
void LogMessage(Class log_class, Level log_level, void LogMessage(Class log_class, Level log_level,
const char* filename, unsigned int line_nr, const char* function, const char* filename, unsigned int line_nr, const char* function,
const char* format, ...) { const char* format, ...) {
if (!filter->CheckMessage(log_class, log_level))
return;
va_list args; va_list args;
va_start(args, format); va_start(args, format);
Entry entry = CreateEntry(log_class, log_level, Entry entry = CreateEntry(log_class, log_level,
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "common/concurrent_ring_buffer.h" #include "common/concurrent_ring_buffer.h"
#include "common/logging/filter.h"
#include "common/logging/log.h" #include "common/logging/log.h"
namespace Log { namespace Log {
...@@ -131,4 +132,6 @@ Entry CreateEntry(Class log_class, Level log_level, ...@@ -131,4 +132,6 @@ Entry CreateEntry(Class log_class, Level log_level,
/// Initializes the default Logger. /// Initializes the default Logger.
std::shared_ptr<Logger> InitGlobalLogger(); std::shared_ptr<Logger> InitGlobalLogger();
void SetFilter(Filter* filter);
} }
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#pragma once
#include <array> #include <array>
#include <string> #include <string>
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#endif #endif
#include "common/logging/backend.h" #include "common/logging/backend.h"
#include "common/logging/filter.h"
#include "common/logging/log.h" #include "common/logging/log.h"
#include "common/logging/text_formatter.h" #include "common/logging/text_formatter.h"
...@@ -116,7 +115,7 @@ void PrintColoredMessage(const Entry& entry) { ...@@ -116,7 +115,7 @@ void PrintColoredMessage(const Entry& entry) {
#endif #endif
} }
void TextLoggingLoop(std::shared_ptr<Logger> logger, const Filter* filter) { void TextLoggingLoop(std::shared_ptr<Logger> logger) {
std::array<Entry, 256> entry_buffer; std::array<Entry, 256> entry_buffer;
while (true) { while (true) {
...@@ -126,9 +125,7 @@ void TextLoggingLoop(std::shared_ptr<Logger> logger, const Filter* filter) { ...@@ -126,9 +125,7 @@ void TextLoggingLoop(std::shared_ptr<Logger> logger, const Filter* filter) {
} }
for (size_t i = 0; i < num_entries; ++i) { for (size_t i = 0; i < num_entries; ++i) {
const Entry& entry = entry_buffer[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 { ...@@ -11,7 +11,6 @@ namespace Log {
class Logger; class Logger;
struct Entry; struct Entry;
class Filter;
/** /**
* Attempts to trim an arbitrary prefix from `path`, leaving only the part starting at `root`. It's * 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); ...@@ -36,6 +35,6 @@ void PrintColoredMessage(const Entry& entry);
* Logging loop that repeatedly reads messages from the provided logger and prints them to the * Logging loop that repeatedly reads messages from the provided logger and prints them to the
* console. It is the baseline barebones log outputter. * 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