muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕

本文介绍了muduo网络库中的日志系统,包括五个日志级别(TRACE, DEBUG, INFO, WARN, ERROR, FATAL)以及其用法。通过Logger和LogStream类,muduo能够方便地记录并打印日志信息。LogStream通过重载<<操作符处理不同类型的日志数据,并利用缓冲区存储日志,确保在对象析构时完成输出。Logger类则负责添加日志前缀和后缀,以及在达到FATAL级别时终止程序。日志信息最终由打印函数输出到屏幕,可通过自定义实现重定向到文件。" 113199235,10545442,获取MySQL rows_examined 的方法,"['数据库', 'MySQL', '性能优化']
摘要由CSDN通过智能技术生成

每一个成熟的项目都有大大小小的日志系统,在关键的地方打印日志信息,常用来跟踪程序运行,查找错误原因等,可以节省大量的debug时间

muduo的日志信息有5个级别

  • TRACE,细粒度最高的日志信息,打印的最详细
  • DEBUG,细粒度级别上对调试有帮助的日志信息
  • INFO,粗粒度级别上强调程序的运行信息
  • WARN,程序能正常运行,但存在潜在风险的信息
  • ERROR,执行出错,但不影响程序继续执行的错误信息
  • FATAL,将导致程序退出的严重信息

muduo的日志格式为
这里写图片描述


在muduo的很多源文件中,多存在着输出日志信息的语句,例如

  LOG_TRACE << "TimerQueue::handleRead() " << howmany << " at " << now.toString();
  LOG_DEBUG << "EventLoop created " << this << " in thread " << threadId_;
  LOG_INFO << "TcpServer::newConnection [" << name_
           << "] - new connection [" << connName
           << "] from " << peerAddr.toIpPort();
  LOG_WARN << "fd = " << fd_ << " Channel::handle_event() POLLHUP";
  LOG_ERROR << "TimerQueue::handleRead() reads " << n << " bytes instead of 8";
  LOG_FATAL << "Another EventLoop " << t_loopInThisThread
            << " exists in this thread " << threadId_;

这些形如LOG_*的调用实际上是宏定义

/* 
 * __FILE__:返回所在文件名
 * __LINE__:返回所在行数
 * __func__:返回所在函数名
 * 
 * 这些都是无名对象,当使用LOG_* << "***"时,
 * 1.构造Logger类型的临时对象,返回LogStream类型变量
 * 2.调用LogStream重载的operator<<操作符,将数据写入到LogStream的Buffer中
 * 3.当前语句结束,Logger临时对象析构,调用Logger析构函数,将LogStream中的数据输出
 */
#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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值