溫馨提示×

Golang在CentOS上的日志配置方法

小樊
45
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女