学习Golang之服务器框架编写 – 配置与日志

blue的配置功能实现在:

https://github.com/lanyutc/blue/tree/master/conf

blue的日志功能实现在:

https://github.com/lanyutc/blue/tree/master/util/log

配置功能

目的是暴露出重要的运行参数,通过配置文件的形式进行设置,比如应用名字,服务名字,提供服务的IP:Port等等。

配置文件使用最简单的key=value格式,同时约定以‘#’开始的行为注释行;配置项分为必需配置项与可选配置项,必需配置项若留空则程序启动时会出错,可选配置项若留空则使用默认值。

谈一下blue的配置项选择

总体思想:对配置的总量进行控制,仅仅暴露相对必要的配置。

APP、Server命名、IP:Port、路径之类的配置放入配置文件中毋庸置疑的,还有一些诸如工作goroutine数量以及工作队列长度,需要特殊场景特殊对待,所以也列入了配置项。但是与TCP相关配置:AcceptTCP的Deadline、Read的Deadline未列入配置项,而是选择了设置默认值隐藏, 并不是表示它们就不重要 。

是否暴露配置这个问题我是这么考虑的: 将一些不经常变动的配置默认化隐藏起来 。这么做的初衷一是为了控制配置总量,不让打开配置文件的人有一种懵的感觉;二是为了贯彻blue的思想:拒绝大而全;最后一个原因,真正需要修改这些默认隐藏配置的人毕竟是少数,或者换句话说,用到这些默认隐藏配置的人应该是高级、资深人士,通过自己的能力修改代码暴露一行配置应该绰绰有余。

一个可选方案是:把隐藏的配置做成可选配置,设置一个默认值,让关心的人去调整。这样违背了减少配置项的初衷,所以最开始就把这个想法搁置了。

配置文件总览

可以看到目前配置文件分成了三个区域:

  1. 基础配置
  2. CS通信配置
  3. 日志配置

之所以分区域的目的也是为了配置文件更清晰。如果你的服务只是提供内部服务,那么对于CS通信配置(区域2)是可以完全注释掉的。

使用

import “github.com/lanyutc/blue/conf”
cfg := conf.GetConfig()

日志功能

记录服务器运行状态与关键信息,用固定格式的文本通过文件保存下来。

日志路径

  • 配置的日志起始目录(配置项:LogPath,注意权限)+ App名字 + Server名字

日志格式

  • 时间(精度秒)|位置|日志等级|内容

日志分级

  • DEBUG
  • INFO
  • WARN
  • ERROR

日志类型

  • 滚动日志,可自定义日志文件名
  • 按天分割日志,可自定义日志文件名
  • 按时分割日志,可自定义日志文件名

日志最终目的是为了方便查阅、比对信息。所以就我个人而言,除了日志的基本内容外,更加需求自定义日志文件名。这样一来,不同功能之间的日志可以靠文件天然区分,减少过滤日志的时间。

然后对于单一日志文件而言,文件大小需要设置上限,文件存在时间需要设置上限,至于压缩打包可以自行通过脚本控制。

目前日志功能有一个缺点,因为从组装日志内容,到落入硬盘整个过程是异步,所以在程序出现异常的情况下,有小概率会导致异常前部分待打印日志丢失。

使用

import “github.com/lanyutc/blue”
LOG = blue.GetLogger(“RollLog”, 10)
DLOG = blue.GetDayLogger(“DayLog”, 30)
HLOG = blue.GetHourLogger(“HourLog”,24)

(全文结束)


转载文章请注明出处:漫漫路 - lanindex.com

Leave a Comment

Your email address will not be published.