9

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

 3 years ago
source link: https://www.lanindex.com/%e5%ad%a6%e4%b9%a0golang%e4%b9%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a1%86%e6%9e%b6%e7%bc%96%e5%86%99-%e9%85%8d%e7%bd%ae%e4%b8%8e%e6%97%a5%e5%bf%97/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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. CS通信配置

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

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

日志功能

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

  • 配置的日志起始目录(配置项:LogPath,注意权限)+ App名字 + Server名字
  • 时间(精度秒)|位置|日志等级|内容
  • DEBUG
  • ERROR
  • 滚动日志,可自定义日志文件名
  • 按天分割日志,可自定义日志文件名
  • 按时分割日志,可自定义日志文件名

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

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

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

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

(全文结束)

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK