|
@@ -31,6 +31,17 @@ namespace logging { namespace {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ struct time_elapsed_gen : public format::generator_t {
|
|
|
|
|
+ long long created;
|
|
|
|
|
+ time_elapsed_gen() : created(millis(now())) {}
|
|
|
|
|
+ static long long millis(timeval tv) {
|
|
|
|
|
+ return tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
|
|
|
|
+ }
|
|
|
|
|
+ std::string str(logpacket const & lp) const override {
|
|
|
|
|
+ return std::to_string(millis(lp.time) - created);
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
struct level_gen : public format::generator_t {
|
|
struct level_gen : public format::generator_t {
|
|
|
std::string str(logpacket const & lp) const override {
|
|
std::string str(logpacket const & lp) const override {
|
|
|
return to_string(lp.level, true);
|
|
return to_string(lp.level, true);
|
|
@@ -235,6 +246,8 @@ namespace logging {
|
|
|
if (is('{')) next = std::strchr(next, '}');
|
|
if (is('{')) next = std::strchr(next, '}');
|
|
|
} else if (is('F') || is('M') || is('L') || is('l')) {
|
|
} else if (is('F') || is('M') || is('L') || is('l')) {
|
|
|
out.gen.push_back(std::make_shared<location_info_gen>(*next));
|
|
out.gen.push_back(std::make_shared<location_info_gen>(*next));
|
|
|
|
|
+ } else if (is('r')) {
|
|
|
|
|
+ out.gen.push_back(std::make_shared<time_elapsed_gen>());
|
|
|
} else {
|
|
} else {
|
|
|
out.gen.push_back(handle(next));
|
|
out.gen.push_back(handle(next));
|
|
|
}
|
|
}
|