centos

CentOS下Golang日志配置技巧

小樊
43
2025-06-20 12:57:31
栏目: 编程语言

在CentOS下配置Golang应用的日志,可以采用以下几种方法:

使用标准库 log

Golang的标准库 log 包提供了基本的日志记录功能。你可以通过设置日志级别、输出格式和输出目标来配置日志。例如,将日志输出到文件并设置日志级别:

package main

import (
	"log"
	"os"
)

func main() {
	logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		log.Fatalf("error opening log file: %v", err)
	}
	defer logFile.Close()

	log.SetOutput(logFile)
	log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)

	log.Println("This is a log message")
	log.Fatalf("This is a fatal error message: %s", "error info")
}

使用第三方日志库

logrus

logrus 是一个功能强大且易于使用的日志库,支持多种格式的日志输出和级别控制。以下是一个使用 logrus 的示例:

package main

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

func main() {
	log := logrus.New()

	// 设置日志格式为JSON
	log.SetFormatter(&logrus.JSONFormatter{})

	// 添加日志文件处理器
	file, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		log.Fatalf("Failed to open log file: %v", err)
	}
	log.SetOutput(file)

	// 记录日志
	log.WithFields(logrus.Fields{
		"animal": "walrus",
		"size":   10,
	}).Info("A group of walrus emerges from the ocean")
}

zap

zap 是 Uber 开源的高性能日志库,具有结构化日志记录和高度定制化的特点。以下是一个使用 zap 的示例:

package main

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

func main() {
	config := zap.Config{
		Level: zap.NewAtomicLevelAt(zap.InfoLevel),
		Encoding: "json",
		EncoderConfig: zapcore.EncoderConfig{
			TimeKey:        "ts",
			LevelKey:       "level",
			MessageKey:     "msg",
			StacktraceKey:  "stacktrace",
			LineEnding:     zapcore.DefaultLineEnding,
			EncodeLevel:    zapcore.LowercaseLevelEncoder,
			EncodeTime:     zapcore.ISO8601TimeEncoder,
			EncodeDuration: zapcore.SecondsDurationEncoder,
			EncodeCaller:   zapcore.ShortCallerEncoder,
		},
		OutputPaths: []string{"stdout"},
		ErrorOutputPaths: []string{"stderr"},
	}

	logger := config.Build()
	defer logger.Sync() // flushes buffer, if any

	logger.Info("This is an info message")
	logger.Error("This is an error message", zap.String("err", "error info"))
}

日志轮转

为了避免日志文件过大,可以使用 logrotate 进行日志轮转。你可以创建一个 logrotate 配置文件,例如 /etc/logrotate.d/myapp

/path/to/your/logfile {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

然后运行 logrotate 命令来应用配置:

sudo logrotate -f /etc/logrotate.d/myapp

通过以上步骤,可以在CentOS系统上配置Golang日志,并根据实际需求选择合适的日志库和配置方式。

0
看了该问题的人还看了