logx

类型与方法说明

1. LogConf

LogConf 是日志配置结构体,用于设置日志相关的各项参数。

  1. type LogConf struct {
  2. ServiceName string `json:",optional"`
  3. Mode string `json:",default=console,options=[console,file,volume]"`
  4. Encoding string `json:",default=json,options=[json,plain]"`
  5. TimeFormat string `json:",optional"`
  6. Path string `json:",default=logs"`
  7. Level string `json:",default=info,options=[debug,info,error,severe]"`
  8. MaxContentLength uint32 `json:",optional"`
  9. Compress bool `json:",optional"`
  10. Stat bool `json:",default=true"`
  11. KeepDays int `json:",optional"`
  12. StackCooldownMillis int `json:",default=100"`
  13. MaxBackups int `json:",default=0"`
  14. MaxSize int `json:",default=0"`
  15. Rotation string `json:",default=daily,options=[daily,size]"`
  16. }

2. WithColor

在纯文本编码时,给字符串添加颜色。

  1. func WithColor(text string, colour color.Color) string
  • 参数:

    • text: 要添加颜色的文本。
    • colour: 颜色对象。
  • 返回值: 返回带颜色的字符串。

示例代码

  1. import "github.com/fatih/color"
  2. text := "Hello, World!"
  3. coloredText := logx.WithColor(text, color.FgRed)
  4. fmt.Println(coloredText)

3. AddGlobalFields

添加全局字段,这些字段将被添加到所有日志条目中。

  1. func AddGlobalFields(fields ...LogField)
  • 参数:
    • fields: 要添加的全局字段。

示例代码

  1. logx.AddGlobalFields(logx.Field("service", "my-service"))

4. ContextWithFields

返回包含给定字段的上下文。

  1. func ContextWithFields(ctx context.Context, fields ...LogField) context.Context
  • 参数:

    • ctx: 上下文对象。
    • fields: 要添加到上下文中的字段。
  • 返回值: 返回新的上下文对象。

示例代码

  1. ctx := context.Background()
  2. ctx = logx.ContextWithFields(ctx, logx.Field("request_id", "12345"))

5. Logger 接口

Logger 接口定义了日志记录的方法。

  1. type Logger interface {
  2. Debug(...any)
  3. Debugf(string, ...any)
  4. Debugv(any)
  5. Debugw(string, ...LogField)
  6. Error(...any)
  7. Errorf(string, ...any)
  8. Errorv(any)
  9. Errorw(string, ...LogField)
  10. Info(...any)
  11. Infof(string, ...any)
  12. Infov(any)
  13. Infow(string, ...LogField)
  14. Slow(...any)
  15. Slowf(string, ...any)
  16. Slowv(any)
  17. Sloww(string, ...LogField)
  18. WithCallerSkip(skip int) Logger
  19. WithContext(ctx context.Context) Logger
  20. WithDuration(d time.Duration) Logger
  21. WithFields(fields ...LogField) Logger
  22. }

示例代码

  1. var logger logx.Logger = logx.WithContext(context.Background())
  2. logger.Info("This is an info log")
  3. logger.Debugf("Debug log with value: %d", 42)
  4. logger.Errorw("Error occurred", logx.Field("error_code", 500))

6. NewLessLogger

创建一个间隔一定时间内只记录一次日志的 LessLogger

  1. func NewLessLogger(milliseconds int) *LessLogger
  • 参数:

    • milliseconds: 时间间隔(毫秒)。
  • 返回值: 返回 LessLogger 对象。

示例代码

  1. lessLogger := logx.NewLessLogger(1000)
  2. lessLogger.Error("This error will be logged at most once per second")

7. NewWriter

创建一个新的 Writer 实例。

  1. func NewWriter(w io.Writer) Writer
  • 参数:

    • w: 一个实现了 io.Writer 接口的实例。
  • 返回值: 返回 Writer 接口的实现。

示例代码

  1. file, err := os.Create("app.log")
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. writer := logx.NewWriter(file)
  6. logx.SetWriter(writer)

日志配置示例

  1. logConf := logx.LogConf{
  2. ServiceName: "example-service",
  3. Mode: "file",
  4. Encoding: "json",
  5. Path: "/var/logs",
  6. Level: "debug",
  7. KeepDays: 7,
  8. MaxContentLength: 1024,
  9. Compress: true,
  10. }
  11. err := logx.SetUp(logConf)
  12. if err != nil {
  13. log.Fatalf("Failed to set up logging: %v", err)
  14. }