日志系统第七弹:日志宏模块与项目测试和总结

日志系统第七弹:日志宏模块与项目测试和总结

一、日志宏模块的实现

1.日志系统的不足

在实现完日志器模块之后,我们已经可以完整的 支持:同步/异步,多落地方向,自定义日志格式的打印了

换言之,我们的日志系统已经大功告成了:

对于局部日志器来说,打印日志搞成最简单的模式:
标准输出+默认格式+默认限制输出等级+默认同步/异步模式

// 局部日志器打印
void test1()
{
   
   
    LoggerBuilder::ptr builder = std::make_shared<LocalLoggerBuilder>();
    // 设置日志器名称
    builder->buildLoggerName("local_logger");
    // 构造并获取日志器
    Logger::ptr logger = builder->build();
    // 正式打印日志
    logger->debug(__FILE__, __LINE__, "%s:%d", "DEBUG", 1);
    logger->info(__FILE__, __LINE__, "%s:%d", "INFO", 1);
    logger->warning(__FILE__, __LINE__, "%s:%d", "WARNING", 1);
    logger->error(__FILE__, __LINE__, "%s:%d", "ERROR", 1);
    logger->fatal(__FILE__, __LINE__, "%s:%d", "FATAL", 1);
}

对于全局日志器来说:如果没有特殊需求的话,直接用全局的default_logger就可以

void test2()
{
   
   
    Logger::ptr logger = LoggerManager::getInstance().default_logger();
    logger->debug(__FILE__, __LINE__, "%s:%d", "DEBUG", 1);
    logger->info(__FILE__, __LINE__, "%s:%d", "INFO", 1);
    logger->warning(__FILE__, __LINE__, "%s:%d", "WARNING", 1);
    logger->error(__FILE__, __LINE__, "%s:%d", "ERROR", 1);
    logger->fatal(__FILE__, __LINE__, "%s:%d", "FATAL", 1);
}

打印日志的地方:这个__FILE__和__LINE__每次打印都要带上
非常不优雅:因此我们可以封装一个宏来代理打印

int main()
{
   
   
    test1();
    std::cout<<std::string(100,'-')<<"\n";
    test2();
    return 0;
}

在这里插入图片描述

2.改进

1.日志打印宏

如果使用函数的话,那么打印日志的__FILE__和__LINE__就会变为函数对应文件和行号了
因此我们只能使用宏(因为宏是替换到调用位置的)

因此,我们可以写出如下的宏:

#define debug(format,...) debug(__FILE__,__LINE__,format,##__VA_ARGS__)
#define info(format,...) info(__FILE__,__LINE__,format,##__VA_ARGS__)
#define warning(format,...) warning(__FILE__,__LINE__,format,##__VA_ARGS__)
#define error(format,...) error(__FILE__,__LINE__,format,##__VA_ARGS__)
#define fatal(format,...) fatal(__FILE__,__LINE__,format,##__VA_ARGS__)

2.获取全局日志器宏

为了方便用户使用, 避免用户直接操作单例对象,我们可以给两个接口:

Logger::ptr getLogger(const std::string &logger_name)
{
   
   
    return LoggerManager::getInstance().getLogger(logger_name);
}

Logger::ptr defaultLogger()
{
   
   
    return LoggerManager::getInstance().default_logger();
}

3.默认日志器打印宏

为了方便用户使用默认日志器,我们也提供一个宏

// 默认日志器打印宏
#define default_debug(format, ...) ns_log::getDefaultLogger()->debug(format, ##__VA_ARGS__)
#define default_info(format, ...) ns_log::getDefaultLogger()->info(format, ##__VA_ARGS__)
#define default_warning(format, ...) ns_log::getDefaultLog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

program-learner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值