Skip to content

Commit 47627ee

Browse files
authored
Merge pull request #1986 from joto/fix-thread-issue-logger
Fix: Fix threading issue in logger
2 parents f8c2a88 + 116e4b2 commit 47627ee

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

src/logging.cpp

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,28 +19,19 @@ logger the_logger{};
1919
/// Access the global logger singleton
2020
logger &get_logger() noexcept { return the_logger; }
2121

22-
std::string logger::generate_common_prefix(fmt::text_style const &ts,
23-
char const *prefix)
22+
void logger::generate_common_prefix(std::string *str, fmt::text_style const &ts,
23+
char const *prefix) const
2424
{
25-
std::string str;
26-
27-
if (m_needs_leading_return) {
28-
m_needs_leading_return = false;
29-
str += '\n';
30-
}
31-
32-
str += fmt::format("{:%Y-%m-%d %H:%M:%S} ",
25+
*str += fmt::format("{:%Y-%m-%d %H:%M:%S} ",
3326
fmt::localtime(std::time(nullptr)));
3427

3528
if (m_current_level == log_level::debug) {
36-
str += fmt::format(ts, "[{:02d}] ", this_thread_num);
29+
*str += fmt::format(ts, "[{:02d}] ", this_thread_num);
3730
}
3831

3932
if (prefix) {
40-
str += fmt::format(ts, "{}: ", prefix);
33+
*str += fmt::format(ts, "{}: ", prefix);
4134
}
42-
43-
return str;
4435
}
4536

4637
void logger::init_thread(unsigned int num)

src/logging.hpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <fmt/chrono.h>
1818
#include <fmt/color.h>
1919

20+
#include <atomic>
2021
#include <cstdio>
2122
#include <utility>
2223

@@ -45,7 +46,14 @@ class logger
4546

4647
auto const &ts = m_use_color ? style : fmt::text_style{};
4748

48-
auto str = generate_common_prefix(ts, prefix);
49+
std::string str;
50+
51+
if (m_needs_leading_return) {
52+
m_needs_leading_return = false;
53+
str += '\n';
54+
}
55+
56+
generate_common_prefix(&str, ts, prefix);
4957

5058
str += fmt::format(ts, format_str, std::forward<TArgs>(args)...);
5159
str += '\n';
@@ -82,14 +90,14 @@ class logger
8290
static void init_thread(unsigned int num);
8391

8492
private:
85-
std::string generate_common_prefix(fmt::text_style const &ts,
86-
char const *prefix);
93+
void generate_common_prefix(std::string *str, fmt::text_style const &ts,
94+
char const *prefix) const;
8795

8896
log_level m_current_level = log_level::info;
8997
bool m_log_sql = false;
9098
bool m_log_sql_data = false;
9199
bool m_show_progress = true;
92-
bool m_needs_leading_return = false;
100+
std::atomic<bool> m_needs_leading_return = false;
93101

94102
#ifdef _WIN32
95103
bool m_use_color = false;

0 commit comments

Comments
 (0)