Back to VNotes

C++ WebServer / 11

日志与配置:让项目更像工程

v5.0 到 v5.5 逐步加入日志、异步日志、日志轮转、命令行配置和优雅退出。这个阶段让项目从 demo 更接近可维护工程。

这一阶段要解决什么问题

服务器运行时必须能观察状态,也要能通过参数调整端口、线程数、资源目录、日志等级等配置,而不是把所有值写死在代码里。

原来的实现有什么缺陷

没有日志时,连接关闭、解析失败、文件不存在、epoll 错误都只能靠临时打印。没有配置时,换端口或调整线程数都要重新改代码。

我是怎么改的

先加入基础日志系统,再补时间戳、文件名、行号和线程安全;之后加入异步日志与日志轮转。最后通过命令行配置和优雅退出补齐工程化入口。

核心代码 / 关键逻辑

./VWebServer --port 8080 \
             --threads 8 \
             --root Resources \
             --log-level WARN

日志用于记录新连接、连接关闭、请求路径、解析失败、文件访问失败、定时器回收和压测状态。

踩坑记录

日志如果直接同步写文件,会污染热路径。异步日志能降低请求处理路径上的阻塞,但也要处理队列、文件轮转和退出时 flush 的问题。