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