你可以通过更改编码器来选择更适合阅读的格式。在 zap 中,最常见的是 zapcore.NewConsoleEncoder,它将日志输出为易读的文本格式,而不是 JSON 格式。

修改后的代码(使用 Console Encoder):

package main

import (
    "os"
    "github.com/natefinch/lumberjack"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
)

var logger *zap.Logger

func Init() {
    // 创建一个 Console 编码器,输出更易读的文本格式
    encoderConfig := zap.NewDevelopmentEncoderConfig()
    encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder // 为了显示彩色日志
    encoder := zapcore.NewConsoleEncoder(encoderConfig)

    // 创建一个日志核心,输出到文件
    fileCore := zapcore.NewCore(
        encoder,
        zapcore.AddSync(&lumberjack.Logger{
            Filename:   "logs/myapp.log",
            MaxSize:    100, // MB
            MaxBackups: 3,
            MaxAge:     30, // days
        }),
        zap.InfoLevel,
    )

    // 创建另一个日志核心,输出到标准输出
    consoleCore := zapcore.NewCore(
        encoder,
        zapcore.AddSync(os.Stdout),
        zap.InfoLevel,
    )

    // 使用 zapcore.NewTee 将两个核心组合起来
    log_zap := zap.New(zapcore.NewTee(fileCore, consoleCore))

    // 将 logger 设置为全局变量
    logger = log_zap
    // 确保 logger 在退出时进行同步
    defer logger.Sync()
}

func main() {
    Init()
    // 记录一条简单的日志
    logger.Info("This is an info log")

    // 记录一条带有字段的日志
    logger.Info("This is an info log with fields",
        zap.String("user", "john"),
        zap.Int("age", 30),
    )
}

关键变化:

  1. 使用 zapcore.NewConsoleEncoder 替代 zapcore.NewJSONEncoder,使得日志输出为更适合人类阅读的格式。
  2. zap.NewDevelopmentEncoderConfig() 是一个用于开发环境的配置,它提供了更加友好的日志格式。
  3. EncodeLevel = zapcore.CapitalColorLevelEncoder 使日志级别使用彩色显示,这样在终端中可以更加清晰地区分不同级别的日志。

结果:

运行该代码后,日志输出将会是易于阅读的文本格式,例如:

2023-10-24T17:14:20.748+0800    INFO    This is an info log
2023-10-24T17:14:20.748+0800    INFO    This is an info log with fields    user=“john”  age=30

说明:

  • 控制台输出:每条日志都以简洁的格式打印在控制台,便于开发者快速查看。
  • 文件输出:日志将依然写入文件 logs/myapp.log,但是也会以易读的文本格式输出。

如果你更喜欢不同的格式或者需要添加其他选项,可以根据具体需要调整 zap 配置。

每日更新-免费小火箭账号
不要错过任何机会,探索最新的应用和游戏,就在我们的平台。
立即访问
最后修改:2024 年 12 月 20 日
如果觉得我的文章对你有用,请随意赞赏