Skip to content

Commit 7352644

Browse files
Merge pull request #1075 from Geode-solutions/fix/logger-with-level
fix(Logger): you can choose the LEVEL of ProgressLogger messages
2 parents 02c4ffa + 5028d13 commit 7352644

11 files changed

+188
-45
lines changed

include/geode/basic/console_progress_logger_client.hpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,33 @@ namespace geode
4040

4141
private:
4242
void start( const uuid& progress_logger_id,
43+
Logger::LEVEL level,
4344
const std::string& message,
4445
index_t nb_steps ) override;
4546

4647
void update( const uuid& progress_logger_id,
48+
Logger::LEVEL level,
4749
index_t current_step,
4850
index_t nb_steps ) override;
4951

50-
void completed( const uuid& progress_logger_id ) override;
52+
void completed(
53+
const uuid& progress_logger_id, Logger::LEVEL level ) override;
5154

52-
void failed( const uuid& progress_logger_id ) override;
55+
void failed(
56+
const uuid& progress_logger_id, Logger::LEVEL level ) override;
57+
58+
[[deprecated]] void start( const uuid& progress_logger_id,
59+
const std::string& message,
60+
index_t nb_steps ) override;
61+
62+
[[deprecated]] void update( const uuid& progress_logger_id,
63+
index_t current_step,
64+
index_t nb_steps ) override;
65+
66+
[[deprecated]] void completed(
67+
const uuid& progress_logger_id ) override;
68+
69+
[[deprecated]] void failed( const uuid& progress_logger_id ) override;
5370

5471
private:
5572
IMPLEMENTATION_MEMBER( impl_ );

include/geode/basic/logger.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ namespace geode
5454

5555
static void set_level( LEVEL level );
5656

57+
template < typename... Args >
58+
static void log( LEVEL level, const Args &...args )
59+
{
60+
log( level, absl::StrCat( args... ) );
61+
}
62+
5763
template < typename... Args >
5864
static void trace( const Args &...args )
5965
{
@@ -96,6 +102,7 @@ namespace geode
96102

97103
[[nodiscard]] static Logger &instance();
98104

105+
static void log( LEVEL level, const std::string &message );
99106
static void log_trace( const std::string &message );
100107
static void log_debug( const std::string &message );
101108
static void log_info( const std::string &message );

include/geode/basic/progress_logger.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <string>
2727

2828
#include <geode/basic/common.hpp>
29+
#include <geode/basic/logger.hpp>
2930
#include <geode/basic/pimpl.hpp>
3031

3132
namespace absl
@@ -38,7 +39,10 @@ namespace geode
3839
class opengeode_basic_api ProgressLogger
3940
{
4041
public:
41-
ProgressLogger( const std::string& message, index_t nb_steps );
42+
[[deprecated]] ProgressLogger(
43+
const std::string& message, index_t nb_steps );
44+
ProgressLogger(
45+
Logger::LEVEL level, const std::string& message, index_t nb_steps );
4246
~ProgressLogger();
4347

4448
index_t increment();

include/geode/basic/progress_logger_client.hpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <string>
2727

2828
#include <geode/basic/common.hpp>
29+
#include <geode/basic/logger.hpp>
2930

3031
namespace geode
3132
{
@@ -40,16 +41,34 @@ namespace geode
4041
virtual ~ProgressLoggerClient() = default;
4142

4243
virtual void start( const uuid& progress_logger_id,
44+
Logger::LEVEL level,
4345
const std::string& message,
4446
index_t nb_steps ) = 0;
4547

4648
virtual void update( const uuid& progress_logger_id,
49+
Logger::LEVEL level,
4750
index_t current_step,
4851
index_t nb_steps ) = 0;
4952

50-
virtual void completed( const uuid& progress_logger_id ) = 0;
53+
virtual void completed(
54+
const uuid& progress_logger_id, Logger::LEVEL level ) = 0;
5155

52-
virtual void failed( const uuid& progress_logger_id ) = 0;
56+
virtual void failed(
57+
const uuid& progress_logger_id, Logger::LEVEL level ) = 0;
58+
59+
[[deprecated]] virtual void start( const uuid& progress_logger_id,
60+
const std::string& message,
61+
index_t nb_steps ) = 0;
62+
63+
[[deprecated]] virtual void update( const uuid& progress_logger_id,
64+
index_t current_step,
65+
index_t nb_steps ) = 0;
66+
67+
[[deprecated]] virtual void completed(
68+
const uuid& progress_logger_id ) = 0;
69+
70+
[[deprecated]] virtual void failed(
71+
const uuid& progress_logger_id ) = 0;
5372

5473
protected:
5574
ProgressLoggerClient() = default;

include/geode/basic/progress_logger_manager.hpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,32 @@ namespace geode
4343
std::unique_ptr< ProgressLoggerClient >&& client );
4444

4545
static void start( const uuid& progress_logger_id,
46+
Logger::LEVEL level,
4647
const std::string& message,
4748
index_t nb_steps );
4849

4950
static void update( const uuid& progress_logger_id,
51+
Logger::LEVEL level,
5052
index_t current_step,
5153
index_t nb_steps );
5254

53-
static void completed( const uuid& progress_logger_id );
55+
static void completed(
56+
const uuid& progress_logger_id, Logger::LEVEL level );
5457

55-
static void failed( const uuid& progress_logger_id );
58+
static void failed(
59+
const uuid& progress_logger_id, Logger::LEVEL level );
60+
61+
[[deprecated]] static void start( const uuid& progress_logger_id,
62+
const std::string& message,
63+
index_t nb_steps );
64+
65+
[[deprecated]] static void update( const uuid& progress_logger_id,
66+
index_t current_step,
67+
index_t nb_steps );
68+
69+
[[deprecated]] static void completed( const uuid& progress_logger_id );
70+
71+
[[deprecated]] static void failed( const uuid& progress_logger_id );
5672

5773
private:
5874
ProgressLoggerManager();

src/geode/basic/console_progress_logger_client.cpp

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,34 +48,38 @@ namespace geode
4848

4949
public:
5050
void start( const uuid& progress_logger_id,
51+
Logger::LEVEL level,
5152
const std::string& message,
5253
index_t /*nb_steps */ )
5354
{
5455
info_.emplace( progress_logger_id, message );
55-
Logger::info( message, " started" );
56+
Logger::log( level, message, " started" );
5657
}
5758

58-
void update(
59-
const uuid& progress_logger_id, index_t current, index_t nb_steps )
59+
void update( const uuid& progress_logger_id,
60+
Logger::LEVEL level,
61+
index_t current,
62+
index_t nb_steps )
6063
{
6164
const auto percent =
6265
std::floor( static_cast< double >( current ) / nb_steps * 100 );
63-
Logger::info( info_.at( progress_logger_id ).message, " ", current,
64-
"/", nb_steps, " (", percent, "%)" );
66+
Logger::log( level, info_.at( progress_logger_id ).message, " ",
67+
current, "/", nb_steps, " (", percent, "%)" );
6568
}
6669

67-
void completed( const uuid& progress_logger_id )
70+
void completed( const uuid& progress_logger_id, Logger::LEVEL level )
6871
{
6972
const auto& info = info_.at( progress_logger_id );
70-
Logger::info(
71-
info.message, " completed in ", info.timer.duration() );
73+
Logger::log(
74+
level, info.message, " completed in ", info.timer.duration() );
7275
info_.erase( progress_logger_id );
7376
}
7477

75-
void failed( const uuid& progress_logger_id )
78+
void failed( const uuid& progress_logger_id, Logger::LEVEL level )
7679
{
7780
const auto& info = info_.at( progress_logger_id );
78-
Logger::info( info.message, " failed in ", info.timer.duration() );
81+
Logger::log(
82+
level, info.message, " failed in ", info.timer.duration() );
7983
info_.erase( progress_logger_id );
8084
}
8185

@@ -88,26 +92,56 @@ namespace geode
8892
ConsoleProgressLoggerClient::~ConsoleProgressLoggerClient() = default;
8993

9094
void ConsoleProgressLoggerClient::start( const uuid& progress_logger_id,
95+
Logger::LEVEL level,
9196
const std::string& message,
9297
index_t nb_steps )
9398
{
94-
impl_->start( progress_logger_id, message, nb_steps );
99+
impl_->start( progress_logger_id, level, message, nb_steps );
100+
}
101+
102+
void ConsoleProgressLoggerClient::update( const uuid& progress_logger_id,
103+
Logger::LEVEL level,
104+
index_t current,
105+
index_t nb_steps )
106+
{
107+
impl_->update( progress_logger_id, level, current, nb_steps );
108+
}
109+
110+
void ConsoleProgressLoggerClient::completed(
111+
const uuid& progress_logger_id, Logger::LEVEL level )
112+
{
113+
impl_->completed( progress_logger_id, level );
114+
}
115+
116+
void ConsoleProgressLoggerClient::failed(
117+
const uuid& progress_logger_id, Logger::LEVEL level )
118+
{
119+
impl_->failed( progress_logger_id, level );
120+
}
121+
122+
void ConsoleProgressLoggerClient::start( const uuid& progress_logger_id,
123+
const std::string& message,
124+
index_t nb_steps )
125+
{
126+
impl_->start(
127+
progress_logger_id, Logger::LEVEL::info, message, nb_steps );
95128
}
96129

97130
void ConsoleProgressLoggerClient::update(
98131
const uuid& progress_logger_id, index_t current, index_t nb_steps )
99132
{
100-
impl_->update( progress_logger_id, current, nb_steps );
133+
impl_->update(
134+
progress_logger_id, Logger::LEVEL::info, current, nb_steps );
101135
}
102136

103137
void ConsoleProgressLoggerClient::completed(
104138
const uuid& progress_logger_id )
105139
{
106-
impl_->completed( progress_logger_id );
140+
impl_->completed( progress_logger_id, Logger::LEVEL::info );
107141
}
108142

109143
void ConsoleProgressLoggerClient::failed( const uuid& progress_logger_id )
110144
{
111-
impl_->failed( progress_logger_id );
145+
impl_->failed( progress_logger_id, Logger::LEVEL::info );
112146
}
113147
} // namespace geode

src/geode/basic/logger.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
#include <geode/basic/logger.hpp>
2424
#include <iostream>
2525

26+
#include <absl/container/flat_hash_map.h>
27+
2628
#include <geode/basic/logger_manager.hpp>
2729
#include <geode/basic/pimpl_impl.hpp>
2830

@@ -41,6 +43,11 @@ namespace geode
4143
level_ = level;
4244
}
4345

46+
void log( LEVEL level, const std::string &message )
47+
{
48+
leveled_log.at( level )( message );
49+
}
50+
4451
void log_trace( const std::string &message )
4552
{
4653
if( level_ <= LEVEL::trace )
@@ -90,6 +97,17 @@ namespace geode
9097
}
9198

9299
private:
100+
const absl::flat_hash_map< geode::Logger::LEVEL,
101+
std::function< void( const std::string & ) > >
102+
leveled_log{
103+
{ geode::Logger::LEVEL::trace, geode::Logger::log_trace },
104+
{ geode::Logger::LEVEL::debug, geode::Logger::log_debug },
105+
{ geode::Logger::LEVEL::info, geode::Logger::log_info },
106+
{ geode::Logger::LEVEL::warn, geode::Logger::log_warn },
107+
{ geode::Logger::LEVEL::err, geode::Logger::log_error },
108+
{ geode::Logger::LEVEL::critical, geode::Logger::log_critical }
109+
};
110+
93111
LEVEL level_{ LEVEL::info };
94112
};
95113

@@ -113,6 +131,11 @@ namespace geode
113131
instance().impl_->set_level( level );
114132
}
115133

134+
void Logger::log( LEVEL level, const std::string &message )
135+
{
136+
instance().impl_->log( level, message );
137+
}
138+
116139
void Logger::log_trace( const std::string &message )
117140
{
118141
instance().impl_->log_trace( message );

src/geode/basic/progress_logger.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,24 @@ namespace geode
3737
class ProgressLogger::Impl
3838
{
3939
public:
40-
Impl( const std::string& message, index_t nb_steps )
41-
: nb_steps_( nb_steps ), current_time_{ absl::Now() }
40+
Impl(
41+
Logger::LEVEL level, const std::string& message, index_t nb_steps )
42+
: nb_steps_( nb_steps ),
43+
current_time_{ absl::Now() },
44+
level_( level )
4245
{
43-
ProgressLoggerManager::start( id_, message, nb_steps_ );
46+
ProgressLoggerManager::start( id_, level, message, nb_steps_ );
4447
}
4548

4649
~Impl()
4750
{
4851
if( current_ == nb_steps_ )
4952
{
50-
ProgressLoggerManager::completed( id_ );
53+
ProgressLoggerManager::completed( id_, level_ );
5154
}
5255
else
5356
{
54-
ProgressLoggerManager::failed( id_ );
57+
ProgressLoggerManager::failed( id_, level_ );
5558
}
5659
}
5760

@@ -63,7 +66,8 @@ namespace geode
6366
if( now - current_time_ > refresh_interval_ )
6467
{
6568
current_time_ = now;
66-
ProgressLoggerManager::update( id_, current_, nb_steps_ );
69+
ProgressLoggerManager::update(
70+
id_, level_, current_, nb_steps_ );
6771
}
6872
return current_;
6973
}
@@ -87,11 +91,18 @@ namespace geode
8791
absl::Time current_time_;
8892
std::mutex lock_;
8993
absl::Duration refresh_interval_{ absl::Seconds( 1 ) };
94+
Logger::LEVEL level_;
9095
};
9196

9297
ProgressLogger::ProgressLogger(
9398
const std::string& message, index_t nb_steps )
94-
: impl_( message, nb_steps )
99+
: ProgressLogger( Logger::LEVEL::info, message, nb_steps )
100+
{
101+
}
102+
103+
ProgressLogger::ProgressLogger(
104+
Logger::LEVEL level, const std::string& message, index_t nb_steps )
105+
: impl_( level, message, nb_steps )
95106
{
96107
}
97108

0 commit comments

Comments
 (0)