|
|
LogliteReference |
|
boost::logging::element_list_t list;
list.push_back(boost::logging::trace);
list.push_back(boost::logging::eol);
bl::sink s1(&std::cout, BOOST_LOG_MASK_LEVEL_2);
s1.attach_qualifier(bl::log);
BOOST_LOG_ADD_OUTPUT_STREAM(s1);
BOOST_LOG(mask_level, qualifier, trace)
BOOST_LOG(1, log, "The error code is: " << errno())
BOOST_LOG_UNFORMATTED(mask_level, qualifier, trace)
BOOST_LOG_UNFORMATTED(1, log, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl);
namespace boost {
namespace logging {
typedef enum { SINK = 0, FORMAT } sink_format_assoc_e;
typedef std::list<boost::shared_ptr<log_element> > element_list_t;
typedef std::list<boost::shared_ptr<std::ostream> > stream_list_t;
typedef unsigned short mask_t;
typedef std::vector<scope_item *> scope_stack_t;
typedef struct
{
mask_t m_mask;
const qualifier *m_qualifier;
std::string m_trace;
std::string m_filename;
unsigned int m_line;
std::string m_func_name;
std::string m_func_sig;
scope_stack_t *m_scope;
} log_param_t;
typedef std::list<format> format_list_t;
typedef tuple<sink, format> sink_format_assoc_t;
typedef std::list<sink_format_assoc_t> sink_format_assoc_list_t;
typedef std::list<qualifier *> qualifier_list_t;
typedef shared_ptr<logger> logger_p;
class logger
{
public:
logger();
static void create_instance();
static logger_p &get_instance();
void add_format(format f);
void add_sink(sink s);
void add_sink(sink s, format f);
inline mask_t get_global_log_mask() ;
void trace(mask_t m,
const qualifier &q,
const std::string &s,
const std::string &f = "",
unsigned int l = 0);
void unformatted_trace(mask_t m,
const qualifier &q,
const std::string &s);
void trace(log_param_t &log_param);
void unformatted_trace(log_param_t &log_param);
void push_scope(scope_item *s);
void pop_scope();
private:
format_list_t m_format_list;
sink_format_assoc_list_t m_sink_format_assoc;
mask_t m_global_log_mask;
scope_stack_t m_scope_stack;
#if defined(BOOST_HAS_THREADS)
boost::mutex m_mutex;
#endif // BOOST_HAS_THREADS
}; // logger
}
}
class log_element
{
public:
virtual std::string to_string();
virtual std::string visit(logger &l, const log_param_t &log_param);
};
class level_element : public log_element
{
public:
std::string to_string(level_t l);
std::string visit(logger &l, const log_param_t &log_param);
};
class trace_element : public log_element
{
public:
std::string to_string(const std::string& s);
std::string visit(logger &l, const log_param_t &log_param);
};
class filename_element : public log_element
{
public:
filename_element() : m_display_format(full_path) {}
filename_element(display_format_e d) : m_display_format(d) {}
std::string to_string();
std::string visit(logger &l, const log_param_t &log_param);
};
class date_element : public log_element
{
public:
date_element()
date_element(const std::string &format)
std::string to_string();
};
class time_element : public log_element
{
public:
time_element()
time_element(const std::string &format)
std::string to_string();
};
class line_element : public log_element
{
public:
std::string to_string();
std::string visit(logger &l, const log_param_t &log_param);
};
class literal_element : public log_element
{
public:
literal_element(const std::string &l);
std::string to_string();
private:
std::string m_literal;
};
class eot_element : public log_element
{
public:
std::string to_string() { return "\f"; };
};
class qualifier_element : public log_element
{
public:
qualifier_element(const qualifier &lq);
std::string to_string();
};
class function_name_element : public log_element
{
public:
std::string to_string(const std::string &n) { return n; }
std::string visit(format &f, const log_param_t &log_param);
};
class pretty_function_name_element : public log_element
{
public:
std::string to_string(const std::string &n) { return n; }
std::string visit(format &f, const log_param_t &log_param);
};
class scope_element : public log_element
{
public:
std::string to_string(const std::string &n) { return n; }
std::string visit(format &f, const log_param_t &log_param);
};
class eol_element : public log_element
{
public:
std::string to_string();
};
level_element level = level_element();
filename_element filename = filename_element();
line_element line = line_element();
date_element date = date_element();
time_element time = time_element();
trace_element trace = trace_element();
eol_element eol = eol_element();
Revised 31 March 2007
© Copyright Jean-Daniel Michaud 2007
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)