|
|
@@ -24,9 +24,6 @@
|
|
|
|
|
|
namespace logging { namespace {
|
|
|
struct log_handle_gen : public format::generator_t {
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return lp.logger;
|
|
|
- }
|
|
|
void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
os << lp.logger;
|
|
|
}
|
|
|
@@ -34,21 +31,21 @@ namespace logging { namespace {
|
|
|
|
|
|
struct thread_name_gen : public detail::thread_info_helper,
|
|
|
public format::generator_t {
|
|
|
- std::string str(logpacket const &) const override {
|
|
|
- return thread_name();
|
|
|
+ void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
+ os << thread_name();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
struct time_elapsed_gen : public detail::time_elapsed_helper,
|
|
|
public format::generator_t {
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return elapsed(lp);
|
|
|
+ void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
+ os << elapsed(lp);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
struct level_gen : public format::generator_t {
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return to_string(lp.level, true);
|
|
|
+ void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
+ os << to_string(lp.level, true);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -65,8 +62,8 @@ namespace logging { namespace {
|
|
|
class_info_gen(char const * token)
|
|
|
: detail::calling_class_helper(components(token)) {}
|
|
|
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return full_name(lp, "::");
|
|
|
+ void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
+ os << full_name(lp, "::");
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -81,38 +78,49 @@ namespace logging { namespace {
|
|
|
};
|
|
|
|
|
|
location_info_gen(char wh) : where(format_codes[wh]) {}
|
|
|
- static std::string str(logpacket const & lp, decltype(where) wh) {
|
|
|
+
|
|
|
+ static void write(logpacket const & lp, std::ostream & os,
|
|
|
+ decltype(where) wh) {
|
|
|
switch (wh) {
|
|
|
case file:
|
|
|
- return lp.info.filename;
|
|
|
+ os << lp.info.filename;
|
|
|
+ break;
|
|
|
case line:
|
|
|
- return std::to_string(lp.info.line);
|
|
|
+ os << std::to_string(lp.info.line);
|
|
|
+ break;
|
|
|
case method:
|
|
|
- return lp.info.function;
|
|
|
+ os << lp.info.function;
|
|
|
+ break;
|
|
|
case classname:
|
|
|
- return class_info_gen(0).str(lp);
|
|
|
+ class_info_gen(0).write(lp, os);
|
|
|
+ break;
|
|
|
case location:
|
|
|
- return str(lp, classname) + "::" + str(lp, method) + " (" +
|
|
|
- str(lp, file) + ", " + str(lp, line) + ")";
|
|
|
+ write(lp, os, classname);
|
|
|
+ os << "::";
|
|
|
+ write(lp, os, method);
|
|
|
+ os << " (";
|
|
|
+ write(lp, os, file);
|
|
|
+ os << ", ";
|
|
|
+ write(lp, os, line);
|
|
|
+ os << ")";
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return str(lp, where);
|
|
|
+ void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
+ write(lp, os, where);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
struct message_gen : public format::generator_t {
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return lp.message.str();
|
|
|
+ void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
+ os << lp.message.str();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
struct literal_gen : public format::generator_t {
|
|
|
literal_gen(std::string const & value) : value(value) {}
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return value;
|
|
|
- }
|
|
|
+
|
|
|
void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
os << value;
|
|
|
}
|
|
|
@@ -122,12 +130,10 @@ namespace logging { namespace {
|
|
|
struct bounds_gen : public format::generator_t {
|
|
|
bounds_gen(format::generator impl, bool is_left, int min, size_t max)
|
|
|
: impl(impl), is_left(is_left), min(min), max(max) {}
|
|
|
- std::string str(logpacket const & lp) const override {
|
|
|
- return impl->str(lp);
|
|
|
- }
|
|
|
+
|
|
|
void write(logpacket const & lp, std::ostream & os) const override {
|
|
|
auto align = is_left ? std::left : std::right;
|
|
|
- std::string str = this->str(lp);
|
|
|
+ std::string str = impl->str(lp);
|
|
|
if (str.length() > max) {
|
|
|
str.erase(str.begin()+max, str.end());
|
|
|
}
|
|
|
@@ -141,6 +147,12 @@ namespace logging { namespace {
|
|
|
} }
|
|
|
|
|
|
namespace logging {
|
|
|
+ std::string format::generator_t::str(logpacket const & lp) const {
|
|
|
+ std::stringstream ss;
|
|
|
+ write(lp, ss);
|
|
|
+ return ss.str();
|
|
|
+ }
|
|
|
+
|
|
|
#define is( chr ) *next == chr
|
|
|
#define is_string( str ) ! strncmp(next, str, strlen(str))
|
|
|
format::generator date_token(char const * next);
|