Skip to content

Commit fb07a39

Browse files
committed
Add Legacy Compatibility to Logger
Switching to the new logger changes API and log format, and requires changes in user code. To make the transition easier, this PR adds an option in the new logger to print logs in the old format.
1 parent 5e548c5 commit fb07a39

File tree

3 files changed

+92
-9
lines changed

3 files changed

+92
-9
lines changed

source/common/logger/ur_logger.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,44 @@ inline void always(const char *format, Args &&...args) {
4848
get_logger().always(format, std::forward<Args>(args)...);
4949
}
5050

51+
template <typename... Args>
52+
inline void debug(const logger::LegacyMessage &p, const char *format,
53+
Args &&...args) {
54+
get_logger().log(p, logger::Level::DEBUG, format,
55+
std::forward<Args>(args)...);
56+
}
57+
58+
template <typename... Args>
59+
inline void info(logger::LegacyMessage p, const char *format, Args &&...args) {
60+
get_logger().log(p, logger::Level::INFO, format,
61+
std::forward<Args>(args)...);
62+
}
63+
64+
template <typename... Args>
65+
inline void warning(logger::LegacyMessage p, const char *format,
66+
Args &&...args) {
67+
get_logger().log(p, logger::Level::WARN, format,
68+
std::forward<Args>(args)...);
69+
}
70+
71+
template <typename... Args>
72+
inline void error(logger::LegacyMessage p, const char *format, Args &&...args) {
73+
get_logger().log(p, logger::Level::ERR, format,
74+
std::forward<Args>(args)...);
75+
}
76+
5177
inline void setLevel(logger::Level level) { get_logger().setLevel(level); }
5278

5379
inline void setFlushLevel(logger::Level level) {
5480
get_logger().setFlushLevel(level);
5581
}
5682

83+
template <typename T> inline std::string toHex(T t) {
84+
std::stringstream s;
85+
s << std::hex << t;
86+
return s.str();
87+
}
88+
5789
/// @brief Create an instance of the logger with parameters obtained from the respective
5890
/// environment variable or with default configuration if the env var is empty,
5991
/// not set, or has the wrong format.

source/common/logger/ur_logger_details.hpp

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111

1212
namespace logger {
1313

14+
struct LegacyMessage {
15+
LegacyMessage(const char *p) : message(p){};
16+
const char *message;
17+
};
18+
1419
class Logger {
1520
public:
1621
Logger(std::unique_ptr<logger::Sink> sink) : sink(std::move(sink)) {
@@ -59,20 +64,63 @@ class Logger {
5964
}
6065
}
6166

67+
template <typename... Args>
68+
void debug(const logger::LegacyMessage &p, const char *format,
69+
Args &&...args) {
70+
log(p, logger::Level::DEBUG, format, std::forward<Args>(args)...);
71+
}
72+
73+
template <typename... Args>
74+
void info(const logger::LegacyMessage &p, const char *format,
75+
Args &&...args) {
76+
log(p, logger::Level::INFO, format, std::forward<Args>(args)...);
77+
}
78+
79+
template <typename... Args>
80+
void warning(const logger::LegacyMessage &p, const char *format,
81+
Args &&...args) {
82+
log(p, logger::Level::WARN, format, std::forward<Args>(args)...);
83+
}
84+
85+
template <typename... Args>
86+
void error(const logger::LegacyMessage &p, const char *format,
87+
Args &&...args) {
88+
log(p, logger::Level::ERR, format, std::forward<Args>(args)...);
89+
}
90+
6291
template <typename... Args>
6392
void log(logger::Level level, const char *format, Args &&...args) {
64-
if (level < this->level) {
93+
log(logger::LegacyMessage(format), level, format,
94+
std::forward<Args>(args)...);
95+
}
96+
97+
template <typename... Args>
98+
void log(const logger::LegacyMessage &p, logger::Level level,
99+
const char *format, Args &&...args) {
100+
if (!sink) {
65101
return;
66102
}
67103

68-
if (sink) {
69-
sink->log(level, format, std::forward<Args>(args)...);
104+
if (isLegacySink) {
105+
sink->log(level, p.message, std::forward<Args>(args)...);
106+
return;
70107
}
108+
if (level < this->level) {
109+
return;
110+
}
111+
112+
sink->log(level, format, std::forward<Args>(args)...);
113+
}
114+
115+
void setLegacySink(std::unique_ptr<logger::Sink> legacySink) {
116+
this->isLegacySink = true;
117+
this->sink = std::move(legacySink);
71118
}
72119

73120
private:
74121
logger::Level level;
75122
std::unique_ptr<logger::Sink> sink;
123+
bool isLegacySink = false;
76124
};
77125

78126
} // namespace logger

source/common/logger/ur_sinks.hpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,7 @@ class Sink {
2828
}
2929

3030
format(buffer, fmt, std::forward<Args &&>(args)...);
31-
32-
std::scoped_lock<std::mutex> lock(output_mutex);
33-
*ostream << buffer.str();
34-
if (level >= flush_level) {
35-
ostream->flush();
36-
}
31+
print(level, buffer.str());
3732
}
3833

3934
void setFlushLevel(logger::Level level) { this->flush_level = level; }
@@ -50,6 +45,14 @@ class Sink {
5045
flush_level = logger::Level::ERR;
5146
}
5247

48+
virtual void print(logger::Level level, const std::string &msg) {
49+
std::scoped_lock<std::mutex> lock(output_mutex);
50+
*ostream << msg;
51+
if (level >= flush_level) {
52+
ostream->flush();
53+
}
54+
}
55+
5356
private:
5457
std::string logger_name;
5558
bool skip_prefix;

0 commit comments

Comments
 (0)