stream Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/log/expressions.hpp>
Şu isim alanını dahil ederiz.
namespace expr = boost::log::expressions;
Şu isim alanını dahil ederiz.
namespace attr = boost::log::attributes;
Bu sınıf formatter'a çevrilebiliyor. Şöyle
yaparız.
boost::log::formatter get_my_formatter ()
{
return boost::log::expressions::stream
<< ...
<< ...
<< ...
<< ...
<< ...
<< ...
<< ...;
}
Şöyle
yaparız.
auto format = expr::stream
<< ...
<< ...
<< ...;
formatter ise bir sink ile kullanıyor. Şöyle
yaparız.
sink->set_formatter (get_my_formatter ());
Eğer alanlar için karakter büyüklüğü tanımlamak istersek
expressions::format çağrısı ile birlikte kullanırız.
FileName
Şöyle
yaparız.
expr::stream
<< expr::attr<std::string>("FileName")
Function
Şöyle
yaparız.
expr::stream
<< expr::attr<std::string>("Function")
level
Elimizde 4 tane level(attribute)
olsun
"error","warning","exception","action".
Şöyle
kullanırız.
BOOST_LOG_SEV(_logger, level) << message;
Şöyle
yaparız.
boost::log::expressions::stream
<< boost::log::expressions::attr< std::string >("level")
Line
Şöyle
yaparız
expr::stream
<< ":" << expr::attr<int>("Line")
line id
Şöyle
yaparız.
boost::log::expressions::stream
//<< std::hex //To print the LineID in Hexadecimal format
<< std::setw(6) << std::setfill('0')
<< line_id
Şu şekilde
kullanırız
%LineID%
Çıktı olarak şunu
alırız
... 1 ...
... 2 ...
... 3 ...
max_size_decor
Mesajın en fazla 100 karakter olmasını sağlar. Şöyle
yaparız.
expr::stream
<< ...
<< expr::max_size_decor (1000)
[
expr::stream << expr::smessage
]
ProcessId
Şöyle yaparız.
expr::stream << expr::attr< attrs::current_process_id::value_type > ("ProcessID");
severity
Bu formatter için factory oluşturmamız gerekir. Şöyle
yaparız.
boost::log::register_simple_formatter_factory
< boost::log::trivial::severity_level, char >("Severity");
Şu şekilde
kullanırız
%Severity%
boost::log::expressions::stream
<< boost::log::trivial::severity
Attribute olarak kullanıp daha sonra filtrelerde kullanmak istersek şöyle
yaparız.
expr::stream
<< "[" << expr::attr< boost::log::trivial::severity_level >("Severity") << "]"
ThreadId
Şöyle
yaparız.
expr::stream
<< expr::attr< boost::thread::id >("ThreadID")
Sanırım sadece şu sabiti kullansak ta
olur.
[%ThreadID%]
expr::stream
<< ...
<< " [" << expr::attr<attr::current_thread_id::value_type>("ThreadID") << "]"
<< ...
Timestamp
Hour:Minute:Second
Şöyle
yaparız.
std::string str ("%H:%M:%S");
if (bSubSeconds)
str += ".%f";
boost::log::expressions::stream
<< boost::log::expressions::format_date_time<boost::posix_time::ptime>
("TimeStamp", str)
Day:Month:Year Hour:Minute:Second
Şöyle
yaparız.
expr::stream
<<expr::format_date_time <boost::posix_time::ptime>
("TimeStamp", "%d-%m-%y %H:%M:%S")
Çıktı olarak şunu alırız
2016-Aug-23 17:51:36.852912 ...
Şöyle
yaparız.
expr::stream << expr::format_date_time <boost::posix_time::ptime>
("TimeStamp", "[%Y-%m-%d_%H:%M:%S.%f] ");
smessage
Şöyle
yaparız.
boost::log::expressions::stream
<< boost::log::expressions::smessage;
Şöyle
yaparız
expr::stream
<< expr::xml_decor[expr::stream << expr::smessage]
Sanırım sadece şu sabiti kullansak ta
olur.
"%Message%"
Diğer
if_ koşulu
Şöyle
yaparız.
sink->set_formatter
(
expr::stream
<< expr::if_(logging::trivial::severity <=
logging::trivial::severity_level::trace)
[
expr::stream << "<font color='black'>"
]
.else_
[
expr::stream << expr::if_(logging::trivial::severity <=
logging::trivial::severity_level::debug)
[
// ...
]
]
<< expr::format_date_time<boost::posix_time::ptime>(
"TimeStamp", "%Y.%m.%d-%H:%M:%S-UTC")
<< ": <" << logging::trivial::severity << "> " << expr::smessage
);