Categorygithub.com/cowsvagina/go-logger
modulepackage
0.3.0
Repository: https://github.com/cowsvagina/go-logger.git
Documentation: pkg.go.dev

# README

go-logger 由业务导向定义了两种日志格式

使用方式见example.go

Why?

最常见的日志打印方式就是一行字符串,比如"user login failed",但是我们常常需要在日志记录内包含一些上下文信息,比如用户ID,比如"user login failed, user_id: 123"。

这种日志虽然在人工排查的时候可以提供一些帮助,但是有两个问题:

  • 程序使用非常不方便,每个人有可能写出不同的形式,无法通用解析
  • 程序员在输出的时候,需要考虑写法,比如用"user id: 123"还是"user_id 123"之类的,虽然很简单,但仍然带来了额外的抉择负担

因此采用json格式的日志输出是最简单的做法,{"msg":"user login failed", "user_id":123},无论是程序解析还是日志输出时都很方便。

How?

普通日志 (app.logs.v1)

即使我们把日志格式统一为json格式,最好统一遵循同样的json schema更方便解析和查询,因此我们约定统一的日志公共字段如下:

{
    schema: (string),   // schema 日志规格, 描述了它属于哪一种格式的日志, 既应该包含哪些字段
    service: (string),  // service 服务名称
    env: (string),      // environment 部署环境
    channel: (string),  // channel 日志类别
    level: (string),    // level 日志级别
    time: (string),     // time 日志时间, ISO8601
    msg: (string),      // message
    ctx: {...}          // context 自定义上下文数据
}

为减少日志字符串传输开销,公共字段都使用了字面缩写。

HTTP Request日志规范 (http.request.v1)

Why?

HTTP接口的请求日志比较特殊,无法套用上面的日志规范,原因是

  • 没有Level
  • 不需要Message
  • 内容相对固定

字段定义

{
    schema: (string),
    service: (string),
    env: (string),
    time: (string),
    ip: (string),
    method: (string),
    path: (string),
    user: (string),
    headers: {
        (string): (any),
        ...
    },
    get: {
        (string): (any),
        ...
    },
    post: {
        (string): (any),
        ...
    },
    extra: {    // 扩展信息,e.g: runtime
        (string): (any),
        ...
    }
    error: {    // 错误信息
        msg: (string)
        stackTrace: [
            ...
        ]    
    }    
}

# Packages

No description provided by the author

# Functions

NewFormatter 获得日志规范对应的格式化对象.
NewLogger 创建新的日志对象.

# Constants

APPLogsV1 运行日志.
No description provided by the author
No description provided by the author
No description provided by the author
HTTPRequestV1 请求日志.

# Variables

ErrFormatterNotFound 找不到对应规范的日志格式化对象.
MaxStackTrace 记录的错误信息的调用栈最大深度.

# Structs

APPLogsV1Data app.logs.v1日志输出内容.
APPLogsV1Formatter app.logs.v1日志格式化.
HTTPRequestV1Data http.request.v1日志输出内容.
HTTPRequestV1Formatter http.request.v1日志格式化.

# Type aliases

Standard 日志规范.