Classes | |
struct | compute |
Computes profiling information, and can show it to the user. More... | |
struct | compute_filter |
Profiles a filter. Don't use directly, use compute_for_filter instead. More... | |
struct | logger_to_write |
given the logger type, gets the write_msg part, without needing to know the logger's definition (a typedef is enough) More... | |
struct | compute_for_logger |
Allows you to compute profiling for your logger class. More... | |
struct | compute_for_filter |
Allows you to compute profiling for your filter class. More... |
If you want to profile your application (find out how much time is spent logging), all you need to do is to surround your logger and filter class(es) by profile::compute_for_logger and with profile::compute_for_filter, like shown below:
Your code:
namespace bl = boost::logging; typedef bl::logger_format_write< > logger_type; typedef bl::filter::no_ts filter_type;
Your code with profiling:
// notice the extra include #include <boost/logging/profile.hpp> namespace bl = boost::logging; typedef bl::logger_format_write< > raw_logger_type; typedef bl::profile::compute_for_logger<raw_logger_type>::type logger_type; typedef bl::filter::no_ts raw_filter_type; typedef bl::profile::compute_for_filter<raw_filter_type>::type filter_type;
In addition to the above, you'll need to set a place where to dump the profile information (which will be dumped at end of the program). This is just a functor that takes a const std::string&
argument. Thus, it can be any destination class. For instance:
// where shall the profile results be outputted? bl::profile::compute::inst().log_results( bl::destination::file("profile.txt") );
Results can look like this:
gather time: 5.562500 seconds write time: 5.265625 seconds filter time: 0.31250 seconds otherthread time: 0.0 seconds
For more info, see compute_for_logger and compute_for_filter classes.