centos

Golang日志在CentOS中如何进行性能调优

小樊
43
2026-01-02 07:00:38
栏目: 编程语言

Golang 日志在 CentOS 的性能调优指南

一 核心原则与瓶颈定位

二 应用层优化要点

三 输出与系统层优化

四 示例配置

package main

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

func newZapLogger() *zap.Logger {
    // 生产环境 Encoder 配置(JSON)
    encCfg := zap.NewProductionEncoderConfig()
    encCfg.EncodeTime = zapcore.ISO8601TimeEncoder

    // 文件输出 + 轮转
    writer := &lumberjack.Logger{
        Filename:   "/var/log/myapp.log", // 确保目录可写
        MaxSize:    100,                 // MB
        MaxBackups: 7,
        MaxAge:     28,                 // 天
        Compress:   true,
    }
    core := zapcore.NewCore(
        zapcore.NewJSONEncoder(encCfg),
        zapcore.AddSync(writer), // 可再包装为 bufio.Writer 提升吞吐
        zap.InfoLevel,
    )
    return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))
}
package main

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

func newAsyncZapLogger() *zap.Logger {
    encCfg := zap.NewProductionEncoderConfig()
    encCfg.EncodeTime = zapcore.ISO8601TimeEncoder

    // 使用 bufio.Writer 做缓冲;可按需进一步封装批量 flush
    file, _ := os.OpenFile("/var/log/myapp-async.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    writer := bufio.NewWriterSize(file, 64<<10) // 64KB 缓冲

    core := zapcore.NewCore(
        zapcore.NewJSONEncoder(encCfg),
        zapcore.AddSync(writer),
        zap.InfoLevel,
    )
    logger := zap.New(core, zap.AddCaller())
    go func() {
        // 简单定时 flush;生产可用更完善的批量/超时策略
        for range time.Tick(1 * time.Second) {
            _ = writer.Flush()
        }
    }()
    return logger
}
package main

import (
    "log"
    "os"
)

func init() {
    f, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    log.SetOutput(f)
    log.SetFlags(log.LstdFlags | log.Lshortfile | log.LUTC) // 精简且可解析
}

五 监控与验证

0
看了该问题的人还看了