Skip to content

Commit 57945c5

Browse files
committed
[HIP][CUDA] Allow customization of the default logging level
The HIP and CUDA adapaters would like a more verbose logging level by default. This patch allows customization per logger. If the default log level is unsupplied, the old default continues to be used. Users can also continue to override the logging level via the various environment variables.
1 parent a1094cd commit 57945c5

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

source/adapters/cuda/adapter.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ class ur_legacy_sink : public logger::Sink {
3636

3737
~ur_legacy_sink() = default;
3838
};
39+
40+
// FIXME: Remove the default log level when querying logging info is supported
41+
// through UR entry points. See #1330.
3942
ur_adapter_handle_t_::ur_adapter_handle_t_()
40-
: logger(logger::get_logger("cuda")) {
43+
: logger(logger::get_logger("cuda",
44+
/*default_log_level*/ logger::Level::ERR)) {
4145

4246
if (std::getenv("UR_LOG_CUDA") != nullptr)
4347
return;

source/adapters/hip/adapter.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,11 @@ class ur_legacy_sink : public logger::Sink {
3636
~ur_legacy_sink() = default;
3737
};
3838

39+
// FIXME: Remove the default log level when querying logging info is supported
40+
// through UR entry points. See #1330.
3941
ur_adapter_handle_t_::ur_adapter_handle_t_()
40-
: logger(logger::get_logger("hip")) {
42+
: logger(
43+
logger::get_logger("hip", /*default_log_level*/ logger::Level::ERR)) {
4144

4245
if (std::getenv("UR_LOG_HIP") != nullptr)
4346
return;

source/common/logger/ur_level.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ inline constexpr auto level_to_str(Level level) {
2323
return "WARNING";
2424
case Level::ERR:
2525
return "ERROR";
26+
case Level::QUIET:
27+
return "QUIET";
2628
default:
2729
return "";
2830
}
@@ -37,7 +39,8 @@ inline auto str_to_level(std::string name) {
3739
const lvl_name lvl_names[] = {{"debug", Level::DEBUG},
3840
{"info", Level::INFO},
3941
{"warning", Level::WARN},
40-
{"error", Level::ERR}};
42+
{"error", Level::ERR},
43+
{"quiet", Level::QUIET}};
4144

4245
for (auto const &item : lvl_names) {
4346
if (item.name.compare(name) == 0) {
@@ -47,8 +50,8 @@ inline auto str_to_level(std::string name) {
4750
throw std::invalid_argument(
4851
std::string("Parsing error: no valid log level for string '") + name +
4952
std::string("'.") +
50-
std::string(
51-
"\nValid log level names are: debug, info, warning and error"));
53+
std::string("\nValid log level names are: debug, info, warning, error, "
54+
"and quiet"));
5255
}
5356

5457
} // namespace logger

source/common/logger/ur_logger.hpp

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@
1515
namespace logger {
1616

1717
Logger create_logger(std::string logger_name, bool skip_prefix = false,
18-
bool skip_linebreak = false);
19-
20-
inline Logger &get_logger(std::string name = "common") {
21-
static Logger logger = create_logger(std::move(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);
2227
return logger;
2328
}
2429

@@ -99,6 +104,8 @@ template <typename T> inline std::string toHex(T t) {
99104
/// UR_LOG_LOADER="level:info;flush:warning;output:file,out.log"
100105
/// @param logger_name name that should be appended to the `UR_LOG_` prefix to
101106
/// 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
102109
/// @return an instance of a logger::Logger. In case of failure in the parsing of
103110
/// the environment variable, returns a default logger with the following
104111
/// options:
@@ -107,23 +114,25 @@ template <typename T> inline std::string toHex(T t) {
107114
/// to be printed immediately as they occur
108115
/// - output: stderr
109116
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) {
111119
std::transform(logger_name.begin(), logger_name.end(), logger_name.begin(),
112120
::toupper);
113121
std::stringstream env_var_name;
114-
const auto default_level = logger::Level::QUIET;
115122
const auto default_flush_level = logger::Level::ERR;
116123
const std::string default_output = "stderr";
117-
auto level = default_level;
124+
auto level = default_log_level;
118125
auto flush_level = default_flush_level;
119126
std::unique_ptr<logger::Sink> sink;
120127

121128
env_var_name << "UR_LOG_" << logger_name;
122129
try {
123130
auto map = getenv_to_map(env_var_name.str().c_str());
124131
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));
127136
}
128137

129138
auto kv = map->find("level");
@@ -151,8 +160,10 @@ inline Logger create_logger(std::string logger_name, bool skip_prefix,
151160
std::cerr << "Wrong logger environment variable parameter: '"
152161
<< map->begin()->first
153162
<< "'. 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));
156167
}
157168

158169
sink = values.size() == 2
@@ -164,8 +175,9 @@ inline Logger create_logger(std::string logger_name, bool skip_prefix,
164175
std::cerr << "Error when creating a logger instance from the '"
165176
<< env_var_name.str() << "' environment variable:\n"
166177
<< 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));
169181
}
170182
sink->setFlushLevel(flush_level);
171183

0 commit comments

Comments
 (0)