GO日志和配置设计
warning:
这篇文章距离上次修改已过239天,其中的内容可能已经有所变动。
package main
import (
"fmt"
"github.com/spf13/viper"
"go.uber.org/zap"
"os"
)
// 初始化日志系统
func initLogger() (*zap.Logger, error) {
// 配置文件路径
viper.SetConfigFile("config.yaml")
if err := viper.ReadInConfig(); err != nil {
return nil, fmt.Errorf("读取配置文件失败: %s", err)
}
// 解析日志配置
logLevel := viper.GetString("log.level")
logPath := viper.GetString("log.path")
// 配置日志级别
level := zap.NewAtomicLevel()
if err := level.UnmarshalText([]byte(logLevel)); err != nil {
return nil, fmt.Errorf("解析日志级别失败: %s", err)
}
// 配置日志编写器,添加时间戳、行号
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
}
// 配置日志级别
core := zapcore.NewCore(
zapcore.NewJSONEncoder(encoderConfig),
zapcore.AddSync(os.Stdout),
level,
)
// 创建日志器
logger := zap.New(core)
return logger, nil
}
func main() {
logger, err := initLogger()
if err != nil {
fmt.Printf("初始化日志失败: %v", err)
return
}
defer logger.Sync()
logger.Info("这是一条信息级别的日志")
logger.Error("这是一条错误级别的日志")
}
这个代码示例展示了如何使用viper库读取配置文件,并根据配置文件中的日志级别和路径初始化一个Uber Go zap日志系统。代码中使用了配置文件中的配置来定义日志的编码方式和日志级别,并且演示了如何将日志输出到控制台。
评论已关闭