诸如此类框架或者开源的造轮子必须是日志模块开始构造,便于打印分析
前言
以下不是一篇完全从零到一的日志模块的构建,仅仅是记录自己敲的时候关注的点,这是我敲的地址,可以看commit 的 log 相关。
供参考
一、类关系
简单画了一下类关系图 (不太会画,凑合看)
二、浅录
可以查看原作者的 README rocket-rpc的开源地址
在日志模块初级阶段这部分的日志特点是包含日志级别、支持日期命名显示、 c 格式化输出以及线程安全。如下:
[INFO] [24-05-04 00:45:11.111] [pid:35412 thread_id:35412][testcase/test_log.cc 22] test info log ll
小tips: 线程安全是什么,线程同步是什么,两者的区别和联系 ?
线程安全(Thread Safety)指的是当多个线程同时访问共享的资源时,系统仍然能够保持正确的行为,不会产生不一致或者异常的结果。
线程同步(Thread Synchronization)则是一种确保多个线程之间正确协作、互相等待以及互相通知的机制。
线程安全是指程序在多线程环境下仍然能够正确运行,而线程同步则是一种实现线程安全的手段,即线程安全通常需要通过线程同步来实现。方法上, 实现线程安全通常需要采用各种线程同步的技术,例如互斥锁、条件变量、信号量等。这些同步机制可以确保多个线程之间的正确协作和互斥访问共享资源,从而保证程序的线程安全性。
1.日志宏定义
遇到了关于日志宏定义上的一些问题,记录在代码,如下(包括注释):
主线程上使用for循环调用日志宏定义测试:
for(int i = 0; i<1000; i++)
DEBUGLOG("test debug log %s","ll");
在日志宏定义上的写法,注释部分是一些不同写法或者错误记录:
//正确写法
#define DEBUGLOG(str, ...) \
do{
\
std::string msg = (new rocket::LogEvent(rocket::LogLevel::Debug))->toString() + rocket::formatString(str,##__VA_ARGS__) + "\n" ;\
rocket::Logger::GetGlobalLogger()->pushLog(msg); \
rocket::Logger::GetGlobalLogger()->log(