16 Nisan 2017 Pazar

log expressions stream Sınıfı

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%
Şöyle yaparız.
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%]
Şöyle yaparız.
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
);

Hiç yorum yok:

Yorum Gönder