日志
[[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\Logger
package log
import "github.com/sirupsen/logrus"
type Logger interface {
Handle(configPath string) (logrus.Hook, error)
}
文件可以储存到 app/extensions
文件夹中(可修改)。例如:
package aliyun
import (
"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.Message
return nil
}