Golang-异步日志库

一、前言

Go 社区中有很多优秀的开源日志框架(如: zap, logrus 等), 它们不仅功能丰富, 而且性能很好, 能够满足绝大数应用场景! 但是在日常开发过程中,因为自身需求或者项目体量的原因, 你也许会觉得这么高大上的日志库对自己来说有点功能过剩, 因为它们的优秀导致学习成本增加, 想要快速入门似乎需要花一些心思才行(学习成本上升并不是将其拒之门外的理由,相反,社区能够有这些优秀的成熟项目是值得每位Gopher为之高兴的事, 要想技术得到提升, 阅读并学习这些优秀的开源项目是必须的), 此时一个简单实用, 容易上手的日志库便成为了自己最想要的。 其实对于大多数人需要使用的日志场景无非以下几点:

  1. 能够分级别输出日志
  2. 能够根据时间或者文件大小对日志文件进行切割保存
  3. 能够根据配置选择需要输出的日志级别

为了探讨学习之用, 在下实践了一款简单实用的异步日志库: plogs

代码采用Golang Channel实现异步写, 如果需要, 可以通过配置同步输出到stdout

二、功能

  • 格式化日志输出
  • 异步输出日志到文件(终端采用同步输出)
  • 可通过WithWriter()添加自定义Writer
  • temp.log总是当前正在输出的日志文件
  • 日志输出级别可配置(默认输出所有级别的日志)
  • 日志文件切割方式: 达到指定大小后执行切割, 默认不切割
  • 提供日志文件保存时长设置: 超过该时长的文件将被删除, 默认不作删除操作
  • 日志级别划分: Panic(异常, 可以捕获), Fatal(致命错误), Error(错误), Warn(警告), Info(流水), Debug(调试信息)
  • 提供不同的日志记录方式: WriteByLevelSeparated(根据Level记录在不同的子目录下), WriteByLevelMerged(所有Level的日志记录在一起), WriteByBoth(单独记录与归并记录同时存在)

三、使用

package main

import (
    "fmt"
    "time"

    "github.com/pyihe/go-pkg/tools"
    "github.com/pyihe/plogs"
)

func main() {
    opts := []plogs.Option{
        plogs.WithName("ALTIMA"),
        plogs.WithFileOption(plogs.WriteByLevelMerged),
        plogs.WithLogPath("./logs"),
        plogs.WithLogLevel(plogs.LevelFatal | plogs.LevelError | plogs.LevelWarn | plogs.LevelInfo | plogs.LevelDebug),
        plogs.WithStdout(true),
        plogs.WithMaxAge(24 * time.Hour),
        plogs.WithMaxSize(10 * 1024 * 1024),
    }

    logger := plogs.NewLogger(opts...)
    defer logger.Close()

    go func() {
        tag := time.Now()
        for n := 0; n < 3; n++ {
            for i := 1; i < 500000; i++ {
                plogs.Debugf("hello, this is level panic!")
                plogs.Infof("hello, this is level panic!")
                plogs.Warnf("hello, this is level panic!")
                plogs.Errorf("hello, this is level panic!")
            }
        }
        fmt.Printf("time consume: %v\n", time.Now().Sub(tag).Milliseconds())
    }()

    tools.Wait()
}

效果截图:

终端截图
文件截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容