debian

Golang在Debian上的日志怎么配置

小樊
53
2025-08-20 06:51:40
栏目: 编程语言

在Debian上配置Golang日志可按以下方式操作,主要涉及日志库选择、输出配置及轮转管理:

一、选择日志库

二、基础配置示例

1. 使用标准库 log

package main

import (
	"log"
	"os"
)

func main() {
	// 输出到文件
	file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()
	log.SetOutput(file) // 设置输出目标
	log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // 设置日志格式
	log.Println("This is a log message.") // 记录日志
}

2. 使用 logrus

package main

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

func main() {
	logrus.SetLevel(logrus.InfoLevel) // 设置日志级别
	logrus.SetFormatter(&logrus.JSONFormatter{}) // 设置JSON格式
	file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		logrus.Fatal(err)
	}
	defer file.Close()
	logrus.SetOutput(file) // 输出到文件
	logrus.Info("This is an info log.") // 记录日志
}

3. 使用 zap

package main

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

func main() {
	config := zap.NewProductionConfig()
	config.OutputPaths = []string{"stdout", "app.log"} // 同时输出到控制台和文件
	logger, err := config.Build()
	if err != nil {
		panic(err)
	}
	defer logger.Sync()
	logger.Info("This is an info log.", zap.String("key", "value")) // 结构化日志
}

三、日志轮转管理

使用 logrotate 工具防止日志文件过大:

  1. 安装 logrotate
    sudo apt install logrotate
    
  2. 创建配置文件 /etc/logrotate.d/myapp
    /path/to/app.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 640 root adm
    }
    
  3. 手动测试轮转:
    sudo logrotate -vf /etc/logrotate.d/myapp
    

四、系统日志集成

若需将Golang日志接入系统日志(如 journalctl):

  1. 在代码中配置输出到 syslog(以logrus为例):
    import (
        "github.com/sirupsen/logrus"
        "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // 可选:集成第三方服务
    )
    func main() {
        hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", logrus.LOG_INFO, "myapp")
        if err == nil {
            logrus.AddHook(hook)
        }
        logrus.Info("This log will be sent to syslog.")
    }
    
  2. 通过 journalctl 查看日志:
    sudo journalctl -u myapp -f
    

五、注意事项

参考来源:

0
看了该问题的人还看了