发布于2026-06-02 阅读(0)
扫一扫,手机访问
在CentOS上跑Golang应用,日志级别的配置是个绕不开的话题。很多同学刚接触时可能会觉得有点懵——到底要怎么设置?用什么工具?其实捋清楚了也就那么几步。

从最基础的流程说起,一般需要解决三个问题:选一个趁手的日志库、定义好日志级别、配置输出渠道。说白了,就是决定"谁在哪儿写什么"。那具体要怎么做呢?接着往下看。
log先从标准库入手,最熟悉也最轻量。下面这个例子展示了如何用标准库来模拟日志级别控制:
package main
import (
"log"
"os"
)
func main() {
// 设置日志输出到标准输出
log.SetOutput(os.Stdout)
// 设置日志前缀
log.SetPrefix("INFO: ")
// 设置日志标志
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
// 设置日志级别(标准库没有直接的日志级别设置,但可以通过自定义函数实现)
logLevel := "INFO"
switch logLevel {
case "DEBUG":
log.SetOutput(os.Stdout)
case "INFO":
log.SetOutput(os.Stdout)
case "WARN":
log.SetOutput(os.Stdout)
case "ERROR":
log.SetOutput(os.Stdout)
default:
log.SetOutput(os.Stdout)
}
// 记录不同级别的日志
log.Println("This is an info message")
log.Println("This is a debug message") // 不会输出,因为日志级别设置为INFO
log.Println("This is a warning message")
log.Println("This is an error message")
}
但这里有个坑:标准库本身没有直接的日志级别概念,上面的示例其实是靠switch去控制输出,并不是真正的"过滤"。当你项目日志增多、需要分级管理时,这个方案就显得有点勉强了。这时候就该请出专业的第三方库了。
logrus用logrus的话,事情就简单多了——它天生就支持日志级别,配置起来几乎是一行代码的事:
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
// 创建一个新的logrus实例
logger := logrus.New()
// 设置日志级别
logger.SetLevel(logrus.InfoLevel)
// 设置日志格式为文本格式
logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
// 记录不同级别的日志
logger.Info("This is an info message")
logger.Debug("This is a debug message") // 不会输出,因为日志级别设置为INFO
logger.Warn("This is a warning message")
logger.Error("This is an error message")
}
看起来是不是清爽多了?SetLevel(logrus.InfoLevel) 一句话就把级别完事了,低于这个级别的日志(比如Debug)会自动忽略。这就是专业库的优势。
真正的生产环境,肯定不能把日志级别写死在代码里。万一线上需要临时调低级别查问题,总不能重新编译一遍吧?这时候,配置文件就派上用场了。配合 viper 读取配置是业界常见的做法:
package main
import (
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
)
func main() {
// 初始化viper
viper.SetConfigName("config") // 配置文件名(不带扩展名)
viper.AddConfigPath(".") // 配置文件路径
err := viper.ReadInConfig() // 读取配置文件
if err != nil {
logrus.Fatal("Error reading config file, ", err)
}
// 创建一个新的logrus实例
logger := logrus.New()
// 设置日志级别
level, err := logrus.ParseLevel(viper.GetString("log.level"))
if err != nil {
logrus.Fatal(err)
}
logger.SetLevel(level)
// 设置日志格式为JSON格式
logger.SetFormatter(&logrus.JSONFormatter{})
// 记录不同级别的日志
logger.Info("This is an info message")
logger.Debug("This is a debug message") // 不会输出,因为日志级别设置为INFO
logger.Warn("This is a warning message")
logger.Error("This is an error message")
}
配套的配置文件 config.yaml 长这样:
log:
level: "info"
改动配置文件后,只要重启应用或动态加载配置,就能立即生效。无论是排查线上问题还是收紧日志输出,都相当灵活。
总结一下:标准库适合极简场景、logrus+zap这类专业库支撑复杂需求、搭配配置管理工具则能让日志策略真正"活"起来。根据你的项目体量和运维习惯选择合适的方案就行。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8