centos

如何利用CentOS Golang日志进行调试

小樊
40
2025-11-23 23:37:17
栏目: 编程语言

在 CentOS 上用 Golang 日志高效调试

一 日志输出与级别配置

// 标准库 log 示例
package main

import (
    "log"
    "os"
)

func main() {
    f, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil { log.Fatal(err) }
    defer f.Close()
    log.SetOutput(f)
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
    log.Println("started")
}
// logrus 示例(JSON)
package main

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

func main() {
    logger := logrus.New()
    logger.SetLevel(logrus.InfoLevel)
    logger.SetFormatter(&logrus.JSONFormatter{})
    logger.SetOutput(os.Stdout) // 生产可改为文件
    logger.WithFields(logrus.Fields{"svc": "myapp"}).Info("started")
}
// zap 示例(结构化、生产友好)
package main

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

func main() {
    cfg := zap.NewProductionConfig()
    cfg.Encoding = "json"
    cfg.EncoderConfig.TimeKey = "ts"
    cfg.EncoderConfig.LevelKey = "level"
    cfg.EncoderConfig.MessageKey = "msg"
    cfg.OutputPaths = []string{"stdout"} // 生产可写 /var/log/myapp.log
    cfg.ErrorOutputPaths = []string{"stderr"}
    logger, _ := cfg.Build()
    defer logger.Sync()
    logger.Info("started")
}

二 运行与实时查看

三 日志轮转与保留策略

# /etc/logrotate.d/myapp 示例
/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0644 root root
}
# 手动触发一次轮转(测试用)
sudo logrotate -f /etc/logrotate.d/myapp

四 集中化与可视化分析

五 进阶调试与性能定位

0
看了该问题的人还看了