go slog 配置日志切割、日志级别

slog 基本介绍

导入包 import “log/slog”
slog内容比较简洁,核心组件有三项,分别是Logger, Record, Handler。用户调用Logger 提供的日志记录方法 Info 记录一条日志,Info 方法会调用一个私有方法 log,log 方法内部会使用 NewRecord 创建一个日志条目 Record,最终Logger 会调用其嵌入的 Handler 对象的 Handle 方法解析 Record 并执行日志记录逻辑。

slog配置日志切割

slog本身不具备日志切割功能,需要引入第三方库lumberjack。lumberjack是一个日志滚动记录器,写入lumberjack的日志达到一定的条件后会进行存档。但是lumberjack本身不具备日志的基础功能,例如日志等级等。一般情况下,lumberjack可以配合其他日志库综合实现需要的功能。
首先为lumberjackLogger赋值,并将其传入handler方法,实现日志切割。

	lumberjackLogger := &lumberjack.Logger{
			Filename:   "logs/test.log",   // 日志文件名
			MaxSize:    10,    // 单个日志文件最大大小(MB)
			MaxBackups: 7, // 最多保留多少个备份文件
			MaxAge:     1,     // 文件最多保存多少天
			Compress:   true,   // 是否压缩旧文件
		}
	fileHandler := slog.NewTextHandler(lumberjackLogger, "")
	slog.SetDefault(slog.New(fileHandler))

slog配置日志级别

日志级别主要包括debug,info,warn,error四种级别,其中debug级别为最低级别。level.Set()方法可以设置日志级别,opts后续传入handler方法实现日志级别控制。

	//初始化level
	var level = new(slog.LevelVar)
	switch conf.Level {
		case "DEBUG":
			level.Set(slog.LevelDebug)
		case "INFO":
			level.Set(slog.LevelInfo)
		case "WARN":
			level.Set(slog.LevelWarn)
		case "ERROR":
			level.Set(slog.LevelError)
		default:
			level.Set(slog.LevelInfo)
	}
	opts := &slog.HandlerOptions{Level: level}
	consoleHandler := slog.NewTextHandler(os.Stdout, opts)

slog配置日志输出方式

日志输出方式一般为文件和控制台输出两种方式,slog通过传入handler函数不同参数用于区分,比如文件输出传入lumberjackLogger,控制台输出传入os.Stdout。slog.SetDefault()方法可以设置全局日志实例。

	//设置日志输出方式
	//日志文件输出
	if conf.Output == "file" {
		fileHandler := slog.NewTextHandler(lumberjackLogger, opts)
		slog.SetDefault(slog.New(fileHandler))	
	} else {
	//日志控制台输出
		consoleHandler := slog.NewTextHandler(os.Stdout, opts)
		slog.SetDefault(slog.New(consoleHandler))
	}

代码示例

	func InitLogger() {
		conf := &LogConfig{
			FileName:   "logs/test.log",
			MaxSize:    10,
			MaxBackups: 7,
			MaxAge:     1,
			Compress:   true,
			Level:      "DEBUG",
			Output:     "file",
		}
		//设置日志级别
		var level = new(slog.LevelVar)
		switch conf.Level {
		case "DEBUG":
			level.Set(slog.LevelDebug)
		case "INFO":
			level.Set(slog.LevelInfo)
		case "WARN":
			level.Set(slog.LevelWarn)
		case "ERROR":
			level.Set(slog.LevelError)
		default:
			level.Set(slog.LevelInfo)
		}
		opts := &slog.HandlerOptions{Level: level}
		//设置日志切割
		lumberjackLogger := &lumberjack.Logger{
			Filename:   conf.FileName,   // 日志文件名
			MaxSize:    conf.MaxSize,    // 单个日志文件最大大小(MB)
			MaxBackups: conf.MaxBackups, // 最多保留多少个备份文件
			MaxAge:     conf.MaxAge,     // 文件最多保存多少天
			Compress:   conf.Compress,   // 是否压缩旧文件
		}
		//设置日志输出方式
		if conf.Output == "file" {
		//日志文件输出
			fileHandler := slog.NewTextHandler(lumberjackLogger, opts)
			slog.SetDefault(slog.New(fileHandler))	
		} else {
		//日志控制台输出
			consoleHandler := slog.NewTextHandler(os.Stdout, opts)
			slog.SetDefault(slog.New(consoleHandler))
		}	
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值