关于增加skynet_fly 日志分割模块

起因

通过群友对skynet_fly的使用测试,发现使用系统日志分割系统会有两个问题。

  1. 软件问题 可能有些系统并不会默认装载logrotate分割软件。
  2. 权限问题 非root用户可能无法在/etc/logrotate.d/新增文件。

就此埋下了我想实现一个内置日志分割模块的决心。

项目修改

  1. 修改原来的run.sh不再启动即配置日志分割。
  2. 把使用系统日志分割变成一个可选项,增加了create_logrotate.sh,可以主动调用配置。
  3. 内置新增log_rotate_m.lua日志分割模块。

提供功能

我没有去增加太多的配置项,我是按照我个人使用日志分割的场景来做的,后续如果有优秀建议,也可修改。

主要提供了两个功能,切割保留历史日志文件整理

  • 切割 我目前写死了每天凌晨进行切割和整理,还做了文件至少多大才切割。
  • 保留历史日志文件整理 提供了保留多少天内,和保留多少个文件的配置。

实现原理

到点重命名日志文件,通过hup消息通知skynet日志服务重新打开日志文件,这种方式不会丢失日志,也不会占用内存。

配置项说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
return {
logrotate_m = {
launch_seq = 1,
launch_num = 1,
default_arg = {
file_path = './', --文件路径
filename = 'server.log', --文件名
limit_size = 0, --最小分割大小
max_age = 7, --最大保留天数
max_backups = 7, --最大保留文件数
sys_cmd = [[
/usr/bin/pkill -HUP -f skynet.logrotate_config.lua\n
]], --系统命令
}
},

test_m = {
launch_seq = 2,
launch_num = 1,
},
}

sys_cmd就是调用系统命令给skynet发送HUP信号,skynet logger服务收到HUP信号就会重新打开日志文件。

使用示例

examples/logrotate

模块实现路径

lualib/module/logrotate_m.lua

总结

增加skynet_fly内置日志分割,为skynet_fly扩展了可选使用功能。
skynetfly源码地址


关于增加skynet_fly 日志分割模块
https://huahua132.github.io/2023/09/10/skynet_fly_ss/logrotate/
作者
huahua132
发布于
2023年9月10日
许可协议