muduo网络库——日志

日志

在网络设备、系统及服务程序等运作时都会产生一个叫log的事件记录;每一行日志都记载着相关信息。muduo网络库也不例外。

日志级别

日志一般有5个正常级别:

  • WARN 警告信息表明潜在错误。
  • INFO打印重要流程信息
  • ERROR错误,不影响软件正常进行
  • FATAL影响程序执行
  • DEBUG 调试信息

另外,还有两个可用的特别的日志记录级别:

  • ALL 是最低等级的,用于打开所有的日志记录
  • OFF 是最高等级的,用于关闭所有日志记录

在本项目中,仅用INFO、ERROR、FATAL、DEBUG四个级别。

Logger.h

#pragma once

#include <string>
#include "noncopyable.h"

enum LogLevel
{
   
    INFO,   //普通信息
    ERROR,  //错误信息
    FATAL,  //core信息
    DEBUG,  //调试信息
};

//输出一个日志类
class Logger: noncopyable
{
   
public:
    //获取日志唯一的实例对象
    static Logger& instance();
    //设置日志级别
    void set_logLevel(int level);
    //写日志
    void log(std::string msg);
private:
    int logLevel_;
    Logger(){
   }
};

Logger.cc

  • 其中Timestamp.h为我们自己实现的头文件,在下篇博客我会提到。
#include <iostream>
#include "logger.h"
#include "Timestamp.h"

//获取日志唯一的实例对象
Logger& Logger::instance()
{
   
    static Logger logger;
    return logger;
}

//设置日志级别
void Logger::set_logLevel(int level)
{
   
    logLevel_ = level;
}

//写日志
void Logger::log(std::string msg)
{
   
    switch(logLevel_)
    {
   
    case INFO:
        std::cout << "[INFO]";
        break;
    case ERROR:
        std::cout << "[ERROR]";
        break;
    case FATAL:
        std::cout << "[FATAL]";
        break;
    case DEBUG:
        std::cout << "[DEBUG]";
        break;
    default:
        break;
    }

    //打印时间和信息msg
    std::cout << Timestamp::now().toString() << ":"<< msg<< std::endl;
}

Logger使用

这些代码直接放在Logger.h文件中即可。

// LOG_INFO("%s %d",arg1,arg2)
//宏代码换行之后需要接续符
//##__VA_ARGS_一个可变参数
#define LOG_INFO(LogmsgFormat,...)\ do \ { \ Logger& logger = Logger::instance();\ logger.setlogLevel(INFO);\ char buf[1024] = {0};\ snprintf(buf, 1024, LogmsgFormat,##__VA_ARGS__);\ logger.log(buf);\ }while (0)

#define LOG_ERROR(LogmsgFormat,...)\ do \ { \ Logger& logger = Logger::instance();\ logger.setlogLevel(ERROR);\ char buf[1024] = {0};\ snprintf(buf, 1024, LogmsgFormat,##__VA_ARGS__);\ logger.log(buf);\ }while (0) 

#define LOG_FATAL(LogmsgFormat,...)\ do \ { \ Logger& logger = Logger::instance();\ logger.setlogLevel(FATAL);\ char buf[1024] = {0};\ snprintf(buf, 1024, LogmsgFormat,##__VA_ARGS__);\ logger.log(buf);\ }while (0)

//因为调试信息很多,影响我们
//默认是给关闭的

#ifdef MUDEBUG
#define LOG_DEBUG(LogmsgFormat,...)\ do \ { \ Logger& logger = Logger::instance();\ logger.setlogLevel(DEBUG);\ char buf[1024] = {0};\ snprintf(buf, 1024, LogmsgFormat,##__VA_ARGS__);\ logger.log(buf);\ }while (0)
#else
    #define LOG_DEBUG(LogmsgFormat,...)
#endif

参考文献

[1] 施磊.重写moduo库.图论科技.2020.7.
全部评论

相关推荐

就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务