3 Mayıs 2017 Çarşamba

log sources severity_logger Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/log/trivial.hpp>
Ya da şu satırı dahil ederiz.
#include <boost/log/sources/severity_logger.hpp>
Bu sınıf bir source'tur. Source ve Sink arasındaki fark şöyledir.
                                  +--------------+
                            +---> | console sink | ----> stdout
                            |     +--------------+
                            |
+--------+      +------+    |     +--------------+
| source | ---> | core | ---+---> | file sink    | ----> log1.txt
+--------+      +------+    |     +--------------+
                            |
                            |     +--------------+
                            +---> | file sink    | ----> log2.txt
                                  +--------------+
Constructor
Şöyle yaparız.
using namespace  boost::log::trivial;
boost::log::sources::severity_logger< severity_level > lg;
Örnek
Eğer kendi enum'larımız kullanmak istersek şöyle yaparız
enum SeverityLevel { trace, fatal };
boost::log::sources::severity_logger<SeverityLevel> lg;
Şöyle kullanırız.
BOOST_LOG_SEV(lg, trace) << "This is a trace message";
BOOST_LOG_SEV(lg, fatal) << "This is a fatal message";
Örnek
Eğer kendi enum'larımız kullanmak istersek şöyle yaparız.
// Define your severity levels
enum severity_level
{
    debug, normal, error, fatal
};

// Define an attribute keyword for severity level
BOOST_LOG_ATTRIBUTE_KEYWORD(a_severity, "Severity", severity_level)

// Define a logger type that uses your severity levels
typedef boost::log::sources::severity_logger< severity_level > logger;
Şöyle kullanırız.
logger lg;
BOOST_LOG_SEV(lg, debug) << "Debug message";
BOOST_LOG_SEV(lg, normal) << "Normal message";
BOOST_LOG_SEV(lg, error) << "Error message";
BOOST_LOG_SEV(lg, fatal) << "Fatal message";
Örnek
Eğer kendi enumlarımızı kullanmak istersek şöyle yaparız.
namespace logging   = boost::log;

enum severity_level
{
  debug,
  info,
  warning,
  error,
  exception
};
src::severity_logger<severity_level> lg;

void write_log(severity_level level, const char *message, ...)
{
  char buffer[512];
  va_list args;

  // Parse ellipsis and add arguments to message
  va_start (args, message);
  vsnprintf (buffer, sizeof(buffer), message, args);
  va_end (args);

  BOOST_LOG_SEV(lg, level) << buffer;
}
Kendi log macrolarımız için şöyle yaparız.
#define DEBUG(msg, ...)         Logger::write_log(debug,   msg, ##__VA_ARGS__);
#define INFO(msg, ...)          Logger::write_log(info,    msg, ##__VA_ARGS__);
#define WARNING(msg, ...)       Logger::write_log(warning, msg, ##__VA_ARGS__);
#define ERROR(msg, ...)         Logger::write_log(error,   msg, ##__VA_ARGS__);
Şöyle yaparız.
DEBUG("Test string %s", "additional string");
Constructor - multithreaded
Şöyle yaparız.
using namespace  boost::log::trivial;
boost::log::sources::severity_logger_mt < severity_level > lg;
Bu sınıfın kardeşi için şöyle yaparız.
boost::log::sources::wseverity_logger_mt< severity_level> lg;
add_attribute metodu
Şöyle yaparız.
src::severity_logger< severity_level > lg;
lg.add_attribute("Function", attrs::constant< std::string >(strFuncName));
lg.add_attribute("FileName", attrs::constant< std::string >(strFileName));
lg.add_attribute("Line", attrs::constant<int >(lineNo));
Şöyle yaparız.
src::severity_logger_mt<SeverityLevel> logger;
logger.add_attribute("Tag",  attrs::constant<std::string>("DEFAULT"));
logger.add_attribute("File", attrs::constant<std::string>(__FILE__));


Hiç yorum yok:

Yorum Gönder