推荐:一个简洁、实用、称手、灵活的Go日志库

gratonos · · 464 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
本人一直以来都没有找到一个称心如意的Go日志库,从个人角度看来,有的库功能太过单一,有的库接口使用起来不够顺手,有的库专注的点不在自己需要的点上。(好吧,以上都是自己造轮子的借口。)于是,本人结合自己近几年的一些想法和实际需求实现了一个新的Go日志库——gxlog。gxlog只依赖于标准库。 很多人只需要一些常规日志功能,比如:日志分级,日志信息(时间、文件名、行号、消息等)格式化,日志输出到控制台或文件,日志文件按天保存到子目录,日志文件大小到上限时创建新文件等。 一部分人可能有一些特殊需求,比如:日志格式化为JSON等其他格式,日志输出对接syslog等后端系统,出错时不仅打印日志还要产生告警事件等。 gxlog用比较恰当的方式同时满足了上述核心需求和扩展需求:对于核心需求用户,gxlog使用简单方便;对于扩展需求用户,gxlog能进行灵活定制和扩展。 gxlog采用了插槽式结构,并且对格式化和输出进行了分离。gxlog内置8个槽,每个槽可放置一个formatter和一个writer,也可闲置。另外,gxlog整体和每个槽都有独立的level和filter。这样,日志格式和输出方式就可以灵活搭配,比如:槽1放text formatter和file writer,槽2放json formatter和syslog writer,槽3放text formatter和file writer,但是level设置为Error,额外单独保存错误日志。 另外,有需要的用户也可把event或hook集成进gxlog,比如:实现一个自定义formatter,用来发送事件通知,然后把自定义的formatter和一个nil writer放到槽4,可选地设置槽4的level或filter,这样就能在输出日志的同时进行一些额外的操作。 formatter方面,gxlog内置了: - text formatter:可进行非常灵活的定制,并提供日志染色功能 - json formatter:可定制省略字段 - formatter function wrapper:类似于http.HandlerFunc writer方面,gxlog内置了: - tcp/unixdomain socket writer:主要目的在于支持使用netcat在本机实时查看日志,代替"tail -f",因为日志文件大小超限会创建新文件,用"tail -f"不方便 - file writer:支持文件分片、按日存放、文件删除检测、压缩、加密 - syslog writer:支持自定义level到severity的映射 - writer function wrapper:类似于http.HandlerFunc - io.Writer wrapper - async wrapper:可以适配所有writer到异步模式 另外,gxlog还提供了一些“酷炫”功能: - 日志标记:被标记日志以特殊颜色显示,适合调试时加的临时日志 - 日志前缀:在不支持转义序列染色的系统上可以用来代替日志标记 - 日志上下文:产生一个日志对象,该对象打印的日志都会带上设置的上下文字段 - 动态上下文:产生一个日志对象,该对象打印的日志都会带上设置的上下文字段的当前值。此功能很适合用于调试,可以经过设置,使得某对象的方法被调用时,所打印的日志都自动带上该对象的所有字段的当前值 - 日志输出限制: - 按数量限制:限制当前文件当前行的日志每N条只打印n条 - 按时间限制:限制当前文件当前行的日志每N秒最多打印n条 最后,gxlog还提供了一些方便使用的辅助方法: - 计时辅助方法:更方便记录一段代码执行花费的时间 - 错误辅助方法:出错时打印错误日志的同时返回一个格式化的错误 - 自动回溯:出现Fatal错误时自动打印当前协程堆栈 项目目前已经有了比较高的完成度,其中有详细的文档和使用示例。examples目录下的示例可以"go run"看效果。欢迎大家试用并提建议。 项目地址:https://github.com/gxlog/gxlog 几张跑示例的截图: ![basic.cut.png](https://static.studygolang.com/190103/6fb1422de00acfcdf26c17dd152b88b0.png) ![auxiliary.cut.png](https://static.studygolang.com/190103/9b39a326658fea991691fd61bf0d144b.png) ![formatters.cut.png](https://static.studygolang.com/190103/b78a69cadf1665210b7b13ae45011537.png)

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

464 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传