hanxi / blog

涵曦的博客

Home Page:https://blog.hanxi.cc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

skynet自定义log服务

hanxi opened this issue · comments

本文主要演示如何给 skynet 设置一个自定义的日志服务,并添加一些额外的功能。

  • 每天切割日志文件
  • 扩展 kill -1 信号,支持安全关服,重新打开日志文件等
  • 日志等级划分

参考示例

首先参考示例 examples/userlog.lua ,使用 skynet.register_protocol 注册 skynet.PTYPE_TEXT 文本消息,用于输出日志。注册 skynet.PTYPE_SYSTEM 系统消息,用于接收系统信号。

实现日志等级功能

代码位置 lualib/log.lua ,这里逻辑比较简单,就是根据配置的日志等级和接口对比,决定是否输出日志,分为 debug, info , warn , error 四个等级。其中 error 增加了调用堆栈输出,方便排查错误。

实现日志服务

  • 每天切割一次文件采用的是 skynet.timeout 接口设置循环定时器,每天把日志文件备份处理。
  • 信号处理采用读取 sighup 文件的第一行,根据文件内容来决定信号内容。

配置

修改 examples/config.userlog 配置文件。

  • logger 是配置服务文件的,我们的服务文件是 service/log.lua 所以这里只配置 log 即可。
  • logservice 配置如果日志服务是 Lua 实现的,需要配置为 snlua
  • logpath 是默认日志服务使用到的,这里我们不需要了,所以可以删除
  • logfile 是新增的配置,用于配置日志输出文件的
  • loglevel 配置输出日志等级
  • logcut 用于配置是否每天切割一个日志文件
  • sighupfile 用于配置接收 sighup 信号时,读取信号数据的文件

其他