Go 语言的日志输出如何加颜色?

Go 日志加颜色的三种方式:手写 ANSI 转义码(\033[31m)、用 logrus/charmbracelet/log 等库的彩色 handler、slog 第三方 handler。本文给出三种实现。

最佳实践
Go 语言的日志输出如何加颜色?封面

最简单:用 ANSI 转义码——\033[31m 红色、\033[32m 绿色、\033[0m 复位;不想手写就用 logrus 或 charmbracelet/log 等自带彩色输出的库。

手写 ANSI 转义码

package main

import "fmt"

const (
    colorRed    = "\033[31m"
    colorGreen  = "\033[32m"
    colorYellow = "\033[33m"
    colorReset  = "\033[0m"
)

func main() {
    fmt.Println(colorRed + "ERROR: 连接失败" + colorReset)
    fmt.Printf("%sINFO%s: 启动完成\n", colorGreen, colorReset)
}

用 logrus(自带彩色)

import log "github.com/sirupsen/logrus"

log.SetFormatter(&log.TextFormatter{ForceColors: true})
log.Warn("黄色警告")   // TTY 下自动彩色

slog 场景

Go 1.21+ 的 slog 本身不带颜色,接 charmbracelet/log 等 handler 即可获得彩色 + 结构化输出。

注意事项

  • 输出重定向到文件时应关闭颜色(转义码会污染日志文件):检测 TTY 后决定;
  • Windows 老终端不支持 ANSI,新终端/PowerShell 已支持。

常见问题(FAQ)

Q:日志采集后颜色码怎么办? 应在写文件时禁用颜色;已混入的可用正则 \x1b\[[0-9;]*m 清洗。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台