c++如何实现一个带权重的日志文件管理系统_自动清理旧日志【进阶】

老瑶吖_9875

老瑶吖_9875

2026-03-25

773人浏览

原创

日志轮转按业务重要性权重保留文件,用std::map映射路径前缀或后缀到权重值,优先删除低权文件,同权按时间淘汰;权重为0则跳过。

c++如何实现一个带权重的日志文件管理系统_自动清理旧日志【进阶】

日志轮转时如何按权重决定保留哪些文件

权重不是指文件大小或时间戳的简单排序,而是你定义的“业务重要性”——比如 error.log 权重 10,access.log 权重 5,debug.log 权重 1。系统清理时优先删低权重文件,同权重再按时间淘汰。

关键在设计一个可扩展的权重映射逻辑,而不是硬编码 if-else 判断文件名:

  • 用 std::map<:string int> 存储后缀或路径前缀到权重的映射(如 ".error" → 10,"api/" → 8)
  • 解析日志文件名时,按顺序匹配最长前缀或最具体后缀,避免 "debug" 匹配到所有含 debug 的名字
  • 权重为 0 的文件不参与轮转,直接跳过(适合临时调试日志)
  • 注意:权重不解决单个大日志爆炸问题,需配合 max_file_size 单独控制

std::filesystem 遍历 + std::chrono 排序的坑在哪

用 std::filesystem::directory_iterator 扫目录看似干净,但实际容易踩三个隐性坑:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • Windows 下 NTFS 时间精度只有 100ns,但 last_write_time() 返回的是 file_time_type,直接转 system_clock::time_point 可能截断,导致同秒内多个日志排序错乱 —— 建议统一用 file_time_type 比较,别强转
  • std::filesystem::is_regular_file() 必须显式调用,否则符号链接、socket 文件会混入,file_size() 对它们可能抛 std::filesystem::filesystem_error
  • 遍历时没加异常捕获,遇到权限拒绝(如某些 systemd 日志目录)会导致整个轮转中断 —— 应用 std::filesystem::status_known() 先探活,失败则跳过并记录警告

示例排序片段:

on_write

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1158

7

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1029

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

3200

5

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

4518

6

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

650

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

343

7

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.17

533

20

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.27

303

6

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3339

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习