日志

[[toc]]

介绍

为了了解应用程序的运行状况,Goravel 提供了强大的日志模块,可以通过 facades.Log 将日志消息、系统错误记录到文件或其他通道。

配置

config/logging.go 中进行所有自定义配置,允许配置不同的日志通道。

Goravel 默认使用 stack 通道记录日志,stack 允许日志转发到多个通道中。

可用的通道驱动

名称 描述
stack 允许使用多个通道
single 单日志文件
daily 每天一个日志文件
custom 自定义驱动

写日志消息

  1. facades.Log.Debug(message)
  2. facades.Log.Debugf(message, args)
  3. facades.Log.Info(message)
  4. facades.Log.Infof(message, args)
  5. facades.Log.Warning(message)
  6. facades.Log.Warningf(message, args)
  7. facades.Log.Error(message)
  8. facades.Log.Errorf(message, args)
  9. facades.Log.Fatal(message)
  10. facades.Log.Fatalf(message, args)
  11. facades.Log.Panic(message)
  12. facades.Log.Panicf(message, args)

创建自定义通道

如果你想定义一个完全自定义的驱动,可以在 config/logging.go 配置文件中指定 custom 驱动类型。 然后包含 via 选项,实现 framework\contracts\log\Logger 接口:

  1. //config/logging.go 配置
  2. "custom": map[string]interface{}{
  3. "driver": "custom",
  4. "via": &Logger{},
  5. },

编写驱动

实现 framework\contracts\log\Logger 接口。

  1. //framework\contracts\log\Logger
  2. package log
  3. type Logger interface {
  4. // Handle pass channel config path here
  5. Handle(channel string) (Hook, error)
  6. }

文件可以储存到 app/extensions 文件夹中(可修改)。例如:

  1. package extensions
  2. import (
  3. "fmt"
  4. "github.com/goravel/framework/contracts/log"
  5. )
  6. type Logger struct {
  7. }
  8. // Handle 传入通道配置路径
  9. func (logger *Logger) Handle(channel string) (log.Hook, error) {
  10. return &Hook{}, nil
  11. }
  12. type Hook struct {
  13. }
  14. // Levels 要监控的等级
  15. func (h *Hook) Levels() []log.Level {
  16. return []log.Level{
  17. log.DebugLevel,
  18. log.InfoLevel,
  19. log.WarningLevel,
  20. log.ErrorLevel,
  21. log.FatalLevel,
  22. log.PanicLevel,
  23. }
  24. }
  25. // Fire 当触发时执行的逻辑
  26. func (h *Hook) Fire(entry log.Entry) error {
  27. fmt.Printf("level=%v time=%v message=%s", entry.GetLevel(), entry.GetTime(), entry.GetMessage())
  28. return nil
  29. }