在项目开发中,日志是不可或缺的一环。通过日志,我们可以随时掌握程序运行状态,排查问题也更有依据。服务端代码则是整个项目的入口,负责调用各个模块完成实际业务。
1. 日志系统实现
C/C++ 编译器提供了两个预定义宏 __FILE__ 和 __LINE__,它们能自动获取当前源文件路径和行号。利用这两个宏,我们可以在日志输出时精确定位到出错位置。
__FILE__:被替换为当前源文件的文件名或路径字符串。__LINE__:被替换为当前代码所在的行号整数。
例如在 test.cpp 第 25 行调用日志宏,日志内容就会带上 [test.cpp : 25] 的标记。
基于此,我们可以封装一个简单的日志函数。这里使用 log1 作为基础实现,支持不同级别(正常、警告、调试、致命)的输出。
#pragma once
#include <iostream>
#include <string>
#include <ctime>
#define NORMAL 1
#define WARNING 2
#define DEBUG 3
#define FATAL 4
// 宏展开后调用 log1 函数,传入级别名、消息、文件和行号
#define LOG1(LEVEL, MESSAGE) log1(#LEVEL, MESSAGE, __FILE__, __LINE__)
void log1(std::string level, std::string message, std::string file, int line) {
std::cout << "[" << level << "]"
<< "[" << time(nullptr) << "]"
<< "[" << message << "]"
<< "[" << file << " : " << line << "]"
<< std::endl;
}


