首页 > 文章列表 > Linux 中 Golang 日志管理技巧

Linux 中 Golang 日志管理技巧

251 2025-04-03

Linux 系统中 Golang 日志如何管理

本文介绍在 Linux 系统中管理 Go 语言日志的几种方法,涵盖标准库、第三方库以及日志轮转和配置文件等方面。

一、利用标准库 log

Go 标准库提供基础的日志记录功能,支持输出到控制台或文件。示例如下:

package main

import (
    "log"
    "os"
)

func main() {
    logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        log.Fatal(err)
    }
    defer logFile.Close()
    log.SetOutput(logFile)
    log.SetFlags(log.LstdFlags | log.Lshortfile)
    log.Println("日志信息")
    log.Printf("带参数的日志信息: %s", "参数值")
}

二、使用第三方日志库

为了更强大的功能,推荐使用第三方日志库:

1. logrus: logrus 功能丰富,支持日志级别、格式化、轮转和钩子等。

package main

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

func main() {
    logger := logrus.New()
    logger.SetLevel(logrus.DebugLevel)
    logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        logger.Fatal(err)
    }
    defer logFile.Close()
    logger.SetOutput(logFile)
    logger.WithFields(logrus.Fields{"事件": "重要事件"}).Info("日志信息")
}

2. zap: zap 以高性能和可定制性见长,来自 Uber。

package main

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "gopkg.in/natefinch/lumberjack.v2"
)

func main() {
    config := zap.NewProductionConfig()
    config.OutputPaths = []string{"stdout", "app.log"}
    w := zapcore.AddSync(&lumberjack.Logger{
        Filename:   "app.log",
        MaxSize:    5, // MB
        MaxBackups: 3,
        MaxAge:     28, // days
    })
    config.OutputPaths = []string{"app.log"}
    logger, _ := config.Build(zapcore.AddSync(w))
    defer logger.Sync()
    logger.Info("zap 日志信息")
}

三、日志轮转与归档

lumberjack 库可以实现日志轮转,避免单文件过大。 以上 zap 示例已包含 lumberjack 的使用。

四、基于配置文件管理日志

使用 TOML 或 YAML 等配置文件,可以灵活配置日志路径、级别等。 (此处省略配置文件示例及读取配置的代码,可参考原文)

通过以上方法,可以有效管理 Go 应用在 Linux 系统中的日志。 选择合适的库和方法取决于应用的具体需求和规模。