15
15
namespace logger {
16
16
17
17
Logger create_logger (std::string logger_name, bool skip_prefix = false ,
18
- bool skip_linebreak = false );
19
-
20
- inline Logger &get_logger (const char *name = " common" ) {
21
- static Logger logger = create_logger (name);
18
+ bool skip_linebreak = false ,
19
+ logger::Level default_log_level = logger::Level::QUIET);
20
+
21
+ inline Logger &
22
+ get_logger (std::string name = " common" ,
23
+ logger::Level default_log_level = logger::Level::QUIET) {
24
+ static Logger logger =
25
+ create_logger (std::move (name), /* skip_prefix*/ false ,
26
+ /* slip_linebreak*/ false , default_log_level);
22
27
return logger;
23
28
}
24
29
@@ -99,6 +104,8 @@ template <typename T> inline std::string toHex(T t) {
99
104
// / UR_LOG_LOADER="level:info;flush:warning;output:file,out.log"
100
105
// / @param logger_name name that should be appended to the `UR_LOG_` prefix to
101
106
// / get the proper environment variable, ie. "loader"
107
+ // / @param default_log_level provides the default logging configuration when the environment
108
+ // / variable is not provided or cannot be parsed
102
109
// / @return an instance of a logger::Logger. In case of failure in the parsing of
103
110
// / the environment variable, returns a default logger with the following
104
111
// / options:
@@ -107,23 +114,25 @@ template <typename T> inline std::string toHex(T t) {
107
114
// / to be printed immediately as they occur
108
115
// / - output: stderr
109
116
inline Logger create_logger (std::string logger_name, bool skip_prefix,
110
- bool skip_linebreak) {
117
+ bool skip_linebreak,
118
+ logger::Level default_log_level) {
111
119
std::transform (logger_name.begin (), logger_name.end (), logger_name.begin (),
112
120
::toupper);
113
121
std::stringstream env_var_name;
114
- const auto default_level = logger::Level::QUIET;
115
122
const auto default_flush_level = logger::Level::ERR;
116
123
const std::string default_output = " stderr" ;
117
- auto level = default_level ;
124
+ auto level = default_log_level ;
118
125
auto flush_level = default_flush_level;
119
126
std::unique_ptr<logger::Sink> sink;
120
127
121
128
env_var_name << " UR_LOG_" << logger_name;
122
129
try {
123
130
auto map = getenv_to_map (env_var_name.str ().c_str ());
124
131
if (!map.has_value ()) {
125
- return Logger (std::make_unique<logger::StderrSink>(
126
- std::move (logger_name), skip_prefix, skip_linebreak));
132
+ return Logger (
133
+ default_log_level,
134
+ std::make_unique<logger::StderrSink>(
135
+ std::move (logger_name), skip_prefix, skip_linebreak));
127
136
}
128
137
129
138
auto kv = map->find (" level" );
@@ -151,8 +160,10 @@ inline Logger create_logger(std::string logger_name, bool skip_prefix,
151
160
std::cerr << " Wrong logger environment variable parameter: '"
152
161
<< map->begin ()->first
153
162
<< " '. Default logger options are set." ;
154
- return Logger (std::make_unique<logger::StderrSink>(
155
- std::move (logger_name), skip_prefix, skip_linebreak));
163
+ return Logger (
164
+ default_log_level,
165
+ std::make_unique<logger::StderrSink>(
166
+ std::move (logger_name), skip_prefix, skip_linebreak));
156
167
}
157
168
158
169
sink = values.size () == 2
@@ -164,8 +175,9 @@ inline Logger create_logger(std::string logger_name, bool skip_prefix,
164
175
std::cerr << " Error when creating a logger instance from the '"
165
176
<< env_var_name.str () << " ' environment variable:\n "
166
177
<< e.what () << std::endl;
167
- return Logger (std::make_unique<logger::StderrSink>(
168
- std::move (logger_name), skip_prefix, skip_linebreak));
178
+ return Logger (default_log_level,
179
+ std::make_unique<logger::StderrSink>(
180
+ std::move (logger_name), skip_prefix, skip_linebreak));
169
181
}
170
182
sink->setFlushLevel (flush_level);
171
183
0 commit comments