centos

Golang在CentOS上的日志配置方法

小樊
39
2025-02-26 18:44:19
栏目: 编程语言

在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.Fatal(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")
}

使用第三方日志库

go-logging

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

package main

import (
	"github.com/op/go-logging"
	"os"
)

func init() {
	logging.SetBackend(logging.NewLogBackend(os.Stderr, "", 0))
	logging.SetFormatter(logging.MustStringFormatter("%{time:2006-01-02 15:04:05} %{level:.4s} %{message}"))
}

var log = logging.MustGetLogger("example")

func main() {
	log.Info("This is an info message")
	log.Errorf("This is an error message: %s", "error info")
}

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,
		},
		OutputPaths: []string{"stdout"},
		ErrorOutputPaths: []string{"stderr"},
	}

	logger := config.Build()
	defer logger.Sync()

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

使用系统日志服务

CentOS提供了 systemd-journaldrsyslog 等系统日志服务,可以集中管理和分析日志。

systemd-journald

systemd-journald 是systemd提供的日志服务,可以记录系统和服务启动信息、日志等。你可以通过编辑 /etc/systemd/journald.conf 文件来配置日志的存储位置和格式。

[Journal]
Storage=persistent

然后重启 systemd-journald 服务:

sudo systemctl restart systemd-journald

rsyslog

rsyslog 是一个强大的日志收集器,可以将日志收集到硬盘并保存。你可以通过编辑 /etc/rsyslog.conf 文件来配置日志的采集规则。

*.* /var/log/log.all

然后重启 rsyslog 服务:

sudo systemctl restart rsyslog

日志轮转

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

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

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

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

0
看了该问题的人还看了