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

您的位置: 首页 > 文章列表 > 编程开发 > ubuntu golang日志级别如何设置

ubuntu golang日志级别如何设置

  发布于2026-07-13 阅读(0)

扫一扫,手机访问

在 Ubuntu 环境下用 Golang 写程序,日志级别该怎么搭?这个问题其实挺常见的——不少刚接触 Go 的朋友会发现标准库的 log 包自带功能比较基础,不支持按级别过滤,而实际项目中又需要区分调试、信息、警告、错误等不同重要程度的输出。下面给出两种务实的方案,从轻量级自定义到第三方成熟库,覆盖不同场景。

ubuntu golang日志级别如何设置

方法一:基于标准库 log 包自建级别控制

标准库的 log 包本身不提供级别概念,但我们可以用几行代码封装一个简单的分级日志器。核心思路是定义枚举常量表示级别,再通过一个全局变量控制输出阈值。来看一个例子:

package main

import (
    "log"
    "os"
)

type LogLevel int

const (
    DEBUG LogLevel = iota
    INFO
    WARNING
    ERROR
)

var logger *log.Logger
var currentLogLevel LogLevel

func init() {
    logger = log.New(os.Stdout, "", log.LstdFlags)
    currentLogLevel = INFO // 默认级别
}

func setLogLevel(level LogLevel) {
    currentLogLevel = level
}

func debug(msg string) {
    if currentLogLevel <= DEBUG {
        logger.Output(2, "DEBUG: "+msg)
    }
}

func info(msg string) {
    if currentLogLevel <= INFO {
        logger.Output(2, "INFO: "+msg)
    }
}

func warning(msg string) {
    if currentLogLevel <= WARNING {
        logger.Output(2, "WARNING: "+msg)
    }
}

func error(msg string) {
    if currentLogLevel <= ERROR {
        logger.Output(2, "ERROR: "+msg)
    }
}

func main() {
    setLogLevel(INFO)
    debug("This is a debug message")   // 不会输出
    info("This is an info message")    // 会输出
    warning("This is a warning message")
    error("This is an error message")
}

这段代码定义了一个 LogLevel 类型和四个常量,通过 setLogLevel 设置当前级别,各输出函数在内部做阈值判断。注意 logger.Output(2, ...) 中的参数 2 是为了获取调用栈中正确的文件行号,属于标准库的一个小技巧。这种方式的好处是零依赖,适合对第三方库有严格限制的项目。

方法二:使用开箱即用的第三方日志库

如果项目允许引入依赖,直接用 logruszap 这类成熟库会省事得多。它们不仅内置了日志级别,还支持结构化输出、性能优化、Hook 扩展等。以 logrus 为例,安装命令:

go get github.com/sirupsen/logrus

然后在代码中只需几行就能生效:

package main

import (
    "github.com/sirupsen/logrus"
)

func main() {
    logrus.SetLevel(logrus.InfoLevel)
    logrus.Debug("This is a debug message")   // 不会输出
    logrus.Info("This is an info message")
    logrus.Warn("This is a warning message")
    logrus.Error("This is an error message")
}

这里设置级别为 InfoLevel,那么 Debug 级别的日志会被直接忽略,只输出 Info、Warn、Error。相比之下,第三方库的 API 更简洁,且底层性能通常经过优化,JSON 格式输出、字段附加等功能也是现成的。

总结一下:如果项目依赖简单、不想引入外部包,方法一的自定义封装完全够用;如果追求开发效率和丰富特性,直接选 logruszap 即可。两种方式都能在 Ubuntu 上稳定运行,根据实际需求取舍就好。

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

热门关注