影响性能的关键因素
CentOS上的优化要点
快速配置示例
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
)
func main() {
// 高性能 JSON 编码器
encCfg := zap.NewProductionEncoderConfig()
encCfg.EncodeTime = zapcore.ISO8601TimeEncoder
encoder := zapcore.NewJSONEncoder(encCfg)
// 使用 lumberjack 做轮转
writer := &lumberjack.Logger{
Filename: "/var/log/myapp.log", // 确保目录可写
MaxSize: 100, // MB
MaxBackups: 7,
MaxAge: 28, // 天
Compress: true,
}
defer writer.Close()
// 可选:加一层缓冲,进一步降低 I/O 次数
buffered := zapcore.AddSync(&zapcore.BufferedWriter{
Writer: writer,
// 可按负载调大,例如 64KB/128KB;过大增加故障时日志滞留
BufferSize: 64 << 10,
})
core := zapcore.NewCore(encoder, buffered, zap.InfoLevel)
logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))
defer logger.Sync()
logger.Info("service started", zap.String("version", "v1.2.3"))
}
import "go.uber.org/zap/zapcore"
var atomicLevel zap.AtomicLevel
atomicLevel.SetLevel(zap.InfoLevel) // 运行时可改为 DebugLevel 等
core := zapcore.NewCore(encoder, writer, &atomicLevel)
devLogger, _ := zap.NewDevelopment()
defer devLogger.Sync()
devLogger.Info("debug log example")
以上示例展示了在 CentOS 上常用的“JSON + 缓冲 + 轮转”组合,以及开发期便捷的控制台输出方式。
监控与验证