muduo网络库学习:日志类封装
示例代码
LOG_TRACE<<"trace ..."; LOG_DEBUG<<"debug ..."; LOG_INFO<<"info ..."; LOG_WARN<<"warn ..."; LOG_ERROR<<"error ..."; //LOG_FATAL<<"fatal ..."; errno = 13; LOG_SYSERR<<"syserr ..."; LOG_SYSFATAL<<"sysfatal ...";
输出示例

宏定义
#define LOG_TRACE if (muduo::Logger::logLevel() <= muduo::Logger::TRACE) \ muduo::Logger(__FILE__, __LINE__, muduo::Logger::TRACE, __func__).stream() #define LOG_DEBUG if (muduo::Logger::logLevel() <= muduo::Logger::DEBUG) \ muduo::Logger(__FILE__, __LINE__, muduo::Logger::DEBUG, __func__).stream() #define LOG_INFO if (muduo::Logger::logLevel() <= muduo::Logger::INFO) \ muduo::Logger(__FILE__, __LINE__).stream() #define LOG_WARN muduo::Logger(__FILE__, __LINE__, muduo::Logger::WARN).stream() #define LOG_ERROR muduo::Logger(__FILE__, __LINE__, muduo::Logger::ERROR).stream() #define LOG_FATAL muduo::Logger(__FILE__, __LINE__, muduo::Logger::FATAL).stream() #define LOG_SYSERR muduo::Logger(__FILE__, __LINE__, false).stream() #define LOG_SYSFATAL muduo::Logger(__FILE__, __LINE__, true).stream()
Logger UML类图

对象析构时输出日志信息
Logger::~Logger()
{
impl_.finish();
const LogStream::Buffer& buf(stream().buffer());
g_output(buf.data(), buf.length());
if (impl_.level_ == FATAL)
{
g_flush();
abort();
}
}

g_output ,g_flush 默认输出到标准输出,可自定义输出到文件
FILE* g_file;
g_file = ::fopen("/tmp/muduo_log", "ae");void dummyOutput(const char* msg, int len)
{
if (g_file)
{
fwrite(msg, 1, len, g_file);
}
}
void dummyFlush()
{
fflush(g_file);
}
Logger::setOutput(dummyOutput);
Logger::setFlush(dummyFlush);
调用关系
Logger => Impl => LogStream => operator<< FixedBuffer
=> g_output => g_flush


浙公网安备 33010602011771号