商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在CentOS中配置Golang日志级别

如何在CentOS中配置Golang日志级别

  发布于2026-06-02 阅读(0)

扫一扫,手机访问

在CentOS上跑Golang应用,日志级别的配置是个绕不开的话题。很多同学刚接触时可能会觉得有点懵——到底要怎么设置?用什么工具?其实捋清楚了也就那么几步。

如何在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这类专业库支撑复杂需求、搭配配置管理工具则能让日志策略真正"活"起来。根据你的项目体量和运维习惯选择合适的方案就行。

本文转载于:https://www.yisu.com/ask/18749469.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注