日志
[[toc]]
介绍
为了帮助你了解应用程序的运行状况,Goravel 提供了强大的日志模块,可以将日志消息、系统错误记录到文件中或其他通道。
该模块可以使用 facades.Log 进行操作,facades.Log 是知名日志组件 sirupsen/logrus 的一个实例,使用方法与 sirupsen/logrus 完全一致。
配置
在 config/logging.go 中进行所有自定义配置。允许配置不同的日志通道,可以进入配置文件进行查看。
Goravel 默认使用 stack 通道记录日志。stack 允许日志转发到多个通道中。
可用的通道驱动
| 名称 | 描述 |
|---|---|
stack |
允许使用多个通道 |
single |
单日志文件 |
daily |
每天一个日志文件 |
custom |
自定义驱动 |
写日志消息
可用级别:
facades.Log.Trace($message)facades.Log.Debug($message)facades.Log.Info($message)facades.Log.Warn($message)facades.Log.Error($message)facades.Log.Fatal($message)facades.Log.Panic($message)
上下文信息
可以将上下文数据数组传递给日志方法。这些信息将被格式化,并与日志消息一起显示:
facades.Log.WithFields(logrus.Fields{"goravel": "framework",}).Debug("web")
创建自定义通道
如果你想定义一个完全自定义的驱动,可以在 config/logging.go 配置文件中指定 custom 驱动类型。
然后包含一个 via 选项,实现一个 framework\contracts\log\Logger 结构:
//config/logging.go 配置"custom": map[string]interface{}{"driver": "custom","via": CustomTest{},"path": "storage/logs/goravel-custom.log",//选配"level": facadesConfig.Env("LOG_LEVEL", "debug"),//选配},
编写驱动
实现 framework\contracts\log\Logger 接口。
//framework\contracts\log\Loggerpackage logimport "github.com/sirupsen/logrus"type Logger interface {Handle(configPath string) (logrus.Hook, error)}
文件可以储存到 app/extensions 文件夹中(可修改)。例如:
package aliyunimport ("github.com/goravel/framework/support/facades""github.com/sirupsen/logrus")type Logger struct {}func (logger Logger) Handle(configPath string) (logrus.Hook, error) {return AliyunLogHook{}, nil}type AliyunLogHook struct {}func (h AliyunLogHook) Levels() []logrus.Level {level := facades.Config.GetString("logging.channels.aliyun.level")if level == "error" {return []logrus.Level{logrus.ErrorLevel,logrus.FatalLevel,logrus.PanicLevel,}}return []logrus.Level{logrus.TraceLevel,logrus.DebugLevel,logrus.InfoLevel,logrus.WarnLevel,logrus.ErrorLevel,logrus.FatalLevel,logrus.PanicLevel,}}func (h AliyunLogHook) Fire(entry *logrus.Entry) error {// todo 相应逻辑level := entry.Level.String()errTime := entry.Time.String()message := entry.Messagereturn nil}
