Skip to content

Commit cff2a2d

Browse files
authored
Merge pull request #1583 from joto/fix-logging-while-progress
Fix logging while progress display is on
2 parents 136dfa1 + 3dbdd24 commit cff2a2d

3 files changed

Lines changed: 49 additions & 27 deletions

File tree

src/logging.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,26 @@ logger the_logger{};
1717
/// Access the global logger singleton
1818
logger &get_logger() noexcept { return the_logger; }
1919

20+
std::string logger::generate_common_prefix(fmt::text_style const &ts,
21+
char const *prefix)
22+
{
23+
std::string str;
24+
25+
if (m_needs_leading_return) {
26+
m_needs_leading_return = false;
27+
str += '\n';
28+
}
29+
30+
str += fmt::format("{:%Y-%m-%d %H:%M:%S} ",
31+
fmt::localtime(std::time(nullptr)));
32+
33+
if (m_current_level == log_level::debug) {
34+
str += fmt::format(ts, "[{}] ", this_thread_num);
35+
}
36+
37+
if (prefix) {
38+
str += fmt::format(ts, "{}: ", prefix);
39+
}
40+
41+
return str;
42+
}

src/logging.hpp

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -36,30 +36,23 @@ enum class log_level
3636
*/
3737
class logger
3838
{
39+
std::string generate_common_prefix(fmt::text_style const &ts,
40+
char const *prefix);
41+
3942
public:
4043
template <typename S, typename... TArgs>
4144
void log(log_level with_level, char const *prefix,
42-
fmt::text_style const &style, S const &format_str,
43-
TArgs &&... tags) const
45+
fmt::text_style const &style, S const &format_str, TArgs &&...args)
4446
{
4547
if (with_level < m_current_level) {
4648
return;
4749
}
4850

4951
auto const &ts = m_use_color ? style : fmt::text_style{};
5052

51-
std::string str = fmt::format("{:%Y-%m-%d %H:%M:%S} ",
52-
fmt::localtime(std::time(nullptr)));
53-
54-
if (m_current_level == log_level::debug) {
55-
str += fmt::format(ts, "[{}] ", this_thread_num);
56-
}
57-
58-
if (prefix) {
59-
str += fmt::format(ts, "{}: ", prefix);
60-
}
53+
auto str = generate_common_prefix(ts, prefix);
6154

62-
str += fmt::format(ts, format_str, std::forward<TArgs>(tags)...);
55+
str += fmt::format(ts, format_str, std::forward<TArgs>(args)...);
6356
str += '\n';
6457

6558
std::fputs(str.c_str(), stderr);
@@ -81,11 +74,15 @@ class logger
8174
void disable_progress() noexcept { m_show_progress = false; }
8275
void auto_progress() noexcept { m_show_progress = osmium::util::isatty(2); }
8376

77+
void needs_leading_return() noexcept { m_needs_leading_return = true; }
78+
void no_leading_return() noexcept { m_needs_leading_return = false; }
79+
8480
private:
8581
log_level m_current_level = log_level::info;
8682
bool m_log_sql = false;
8783
bool m_log_sql_data = false;
8884
bool m_show_progress = true;
85+
bool m_needs_leading_return = false;
8986

9087
#ifdef _WIN32
9188
bool m_use_color = false;
@@ -98,51 +95,51 @@ class logger
9895
logger &get_logger() noexcept;
9996

10097
template <typename S, typename... TArgs>
101-
void log_debug(S const &format_str, TArgs &&... tags)
98+
void log_debug(S const &format_str, TArgs &&... args)
10299
{
103100
get_logger().log(log_level::debug, nullptr, {}, format_str,
104-
std::forward<TArgs>(tags)...);
101+
std::forward<TArgs>(args)...);
105102
}
106103

107104
template <typename S, typename... TArgs>
108-
void log_info(S const &format_str, TArgs &&... tags)
105+
void log_info(S const &format_str, TArgs &&... args)
109106
{
110107
get_logger().log(log_level::info, nullptr, {}, format_str,
111-
std::forward<TArgs>(tags)...);
108+
std::forward<TArgs>(args)...);
112109
}
113110

114111
template <typename S, typename... TArgs>
115-
void log_warn(S const &format_str, TArgs &&... tags)
112+
void log_warn(S const &format_str, TArgs &&... args)
116113
{
117114
get_logger().log(log_level::warn, "WARNING", fg(fmt::color::red),
118-
format_str, std::forward<TArgs>(tags)...);
115+
format_str, std::forward<TArgs>(args)...);
119116
}
120117

121118
template <typename S, typename... TArgs>
122-
void log_error(S const &format_str, TArgs &&... tags)
119+
void log_error(S const &format_str, TArgs &&... args)
123120
{
124121
get_logger().log(log_level::error, "ERROR",
125122
fmt::emphasis::bold | fg(fmt::color::red), format_str,
126-
std::forward<TArgs>(tags)...);
123+
std::forward<TArgs>(args)...);
127124
}
128125

129126
template <typename S, typename... TArgs>
130-
void log_sql(S const &format_str, TArgs &&... tags)
127+
void log_sql(S const &format_str, TArgs &&... args)
131128
{
132-
auto const &logger = get_logger();
129+
auto &logger = get_logger();
133130
if (logger.log_sql()) {
134131
logger.log(log_level::error, "SQL", fg(fmt::color::blue), format_str,
135-
std::forward<TArgs>(tags)...);
132+
std::forward<TArgs>(args)...);
136133
}
137134
}
138135

139136
template <typename S, typename... TArgs>
140-
void log_sql_data(S const &format_str, TArgs &&... tags)
137+
void log_sql_data(S const &format_str, TArgs &&... args)
141138
{
142-
auto const &logger = get_logger();
139+
auto &logger = get_logger();
143140
if (logger.log_sql_data()) {
144141
logger.log(log_level::error, "SQL", {}, format_str,
145-
std::forward<TArgs>(tags)...);
142+
std::forward<TArgs>(args)...);
146143
}
147144
}
148145

src/progress-display.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ void progress_display_t::print_summary() const
4040
std::time_t const now = std::time(nullptr);
4141

4242
if (m_enabled) {
43+
get_logger().no_leading_return();
4344
fmt::print(stderr, "\r{:90s}\r", "");
4445
}
4546

@@ -62,6 +63,7 @@ void progress_display_t::print_summary() const
6263
void progress_display_t::print_status(std::time_t now) const
6364
{
6465
if (m_enabled) {
66+
get_logger().needs_leading_return();
6567
fmt::print(stderr,
6668
"\rProcessing: Node({}k {:.1f}k/s) Way({}k {:.2f}k/s)"
6769
" Relation({} {:.1f}/s)",

0 commit comments

Comments
 (0)