linux

Golang在Linux中的日志管理怎样做

小樊
42
2025-11-30 14:36:57
栏目: 编程语言

整体思路与分层架构

库选型与快速上手

示例 标准库 log 写入文件

package main

import (
	"log"
	"os"
)

func main() {
	f, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil { log.Fatal(err) }
	defer f.Close()
	log.SetOutput(f)
	log.SetPrefix("INFO: ")
	log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
	log.Println("hello, standard log")
}

示例 zap 写入文件并轮转(配合 lumberjack)

package main

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

func main() {
	core := zapcore.NewCore(
		zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
		zapcore.AddSync(&lumberjack.Logger{
			Filename:   "app.log",
			MaxSize:    10,     // MB
			MaxBackups: 7,
			MaxAge:     28,     // days
			Compress:   true,
		}),
		zap.InfoLevel,
	)
	logger := zap.New(core, zap.AddCaller())
	defer logger.Sync()
	logger.Info("hello, zap with rotation")
}

示例 logrus 写入文件并轮转(配合 file-rotatelogs)

package main

import (
	"github.com/sirupsen/logrus"
	"github.com/lestrrat-go/file-rotatelogs"
	"time"
)

func main() {
	writer, _ := rotatelogs.New(
		"app.log.%Y%m%d",
		rotatelogs.WithLinkName("app.log"),
		rotatelogs.WithMaxAge(7*24*time.Hour),
		rotatelogs.WithRotationTime(24*time.Hour),
	)
	logrus.SetOutput(writer)
	logrus.SetFormatter(&logrus.JSONFormatter{})
	logrus.SetLevel(logrus.InfoLevel)
	logrus.Info("hello, logrus with rotation")
}

本地存储与轮转策略

集中式日志与运维实践

性能与安全最佳实践

0
看了该问题的人还看了