日志系统设计
在工程实践中,完善的日志系统是排查问题的基石。C/C++ 编译器提供了两个特殊的预定义宏,用于精确定位日志来源:
__FILE__:自动替换为当前源文件的路径或文件名。例如在test.cpp中调用,日志将显示[test.cpp : ...]。__LINE__:自动替换为当前代码所在的行号。若在第 25 行调用,日志将显示[test.cpp : 25]。
基于这两个宏,我们可以封装一个统一的日志输出接口。以下是一个示例实现,定义了不同级别的日志宏并调用底层打印函数:
#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;
}
Server 端实现
Server 程序负责加载数据源、初始化搜索器并响应用户查询。数据源通常存储在 data/raw_html/raw.txt,前端资源位于 。


