beego的模块篇 - logs日志

发布时间:2024年01月19日

支持file、console、net和smtp作为目标提供程序。它是这样安装的:

go get github.com/beego/beego/v2/core/logs

1 基本用法

1.1 通常用发

import (
	"github.com/beego/beego/v2/core/logs"
)

初始化日志变量(10000是缓存大小):

log := logs.NewLogger(10000)

然后添加输出提供程序(它支持同时向多个提供程序输出)。第一个参数是提供程序名称(console、file、multifile、conn、smtp或es)。

log.SetLogger("console")

第二个参数是特定于提供程序的配置字符串

 logs.SetLogger(logs.AdapterFile,{"filename":"project.log","level":7,"maxlines":0,"maxsize":0,"daily":true,"maxdays":10,"color":true})

然后我们可以在代码中使用它:

package main

import (
	"github.com/beego/beego/v2/core/logs"
)

func main() {    
	//an official log.Logger
	l := logs.GetLogger()
	l.Println("this is a message of http")
	//an official log.Logger with prefix ORM
	logs.GetLogger("ORM").Println("this is a message of orm")

    logs.Debug("my book is bought in the year of ", 2016)
 	logs.Info("this %s cat is %v years old", "yellow", 3)
 	logs.Warn("json is a type of kv like", map[string]int{"key": 2016})
   	logs.Error(1024, "is a very", "good game")
   	logs.Critical("oh,crash")
}

1.2 另一种方式

Beego /logs支持声明一个要使用的日志记录器

 package main
    
    import (
    	"github.com/beego/beego/v2/core/logs"
    )
    
    func main() {
    	log := logs.NewLogger()
    	log.SetLogger(logs.AdapterConsole)
    	log.Debug("this is a debug message")
    }

2 记录调用者信息(文件名和行号)

该模块可以配置为在日志输出中包含日志调用的文件和行号。此功能在默认情况下是禁用的,但可以使用以下代码启用:

logs.EnableFuncCallDepth(true)

使用true打开文件和行号登录,false关闭。默认为false。

如果您的应用程序封装了对日志方法的调用,则可能需要使用SetLogFuncCallDepth来设置在检索调用者信息之前要跳过的堆栈帧数。默认值是2。

logs.SetLogFuncCallDepth(3)

3 异步日志

您可以将logger设置为异步日志记录以提高性能:

logs.Async()

添加一个参数来设置缓冲区通道日志的长度。

4 提供程序配置

每个提供程序都支持一组配置选项。

4.1 控制台

可以设置输出级别或使用默认值。使用操作系统。默认为标准输出。

 logs.SetLogger(logs.AdapterConsole, `{"level":1}`)

4.2 文件

  logs.SetLogger(logs.AdapterFile, `{"filename":"test.log"}`)

参数:

  • 文件名:保存到文件名。
  • maxlines:每个日志文件的最大行数,默认1000000。
  • maxsize:每个日志文件的最大大小,默认1<28或256M。
  • daily:如果日志按天轮换,则默认为 true。
  • maxdays:日志文件保留的最大天数,默认为 7。
  • rotate:是否启用logrotate,默认为true。
  • level:日志级别,默认为Trace。
  • perm:日志文件权限

4.3 多文件

logs.SetLogger(logs.AdapterMultiFile, ``{"filename":"test.log","separate":["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]}``)

参数:

  • filename:保存到文件名。
  • maxlines:每个日志文件的最大行数,默认1000000。
  • maxsize:每个日志文件的最大大小,默认1<28或256M。
  • daily:如果日志按天轮换,则默认为 true。
  • maxdays:日志文件保留的最大天数,默认为 7。
  • rotate:是否启用logrotate,默认为true。
  • level:日志级别,默认为Trace。
  • perm:日志文件权限
  • split:日志文件将按照json数组中设置的日志级别分离到test.error.log/test.debug.log

4.4 conn

logs.SetLogger(logs.AdapterConn, `{"net":"tcp","addr":":7020"}`)

参数:

  • reconnectOnMsg:如果为 true:每次发送消息时重新打开并关闭连接。默认为假。
  • reconnect:如果为真:自动连接。默认为假。
  • net:连接类型:tcp、unix 或 udp。
  • addr:网络连接地址。
  • level:日志级别,默认为Trace。

4.5 smtp

logs.SetLogger(logs.AdapterMail, `{"username":"beegotest@gmail.com","password":"xxxxxxxx","host":"smtp.gmail.com:587","sendTos":["xiemengjun@gmail.com"]}`)

Parameters:

  • username: smtp 用户.
  • password: smtp 密码.
  • host: SMTP 服务主机.
  • sendTos: 日志发送到的邮箱地址。
  • subject: 电子邮件主题,默认情况下来自服务器的诊断消息。
  • level: 日志级别,默认为Trace。

4.6 ElasticSearch

 logs.SetLogger(logs.AdapterEs, `{"dsn":"http://localhost:9200/","level":1}`)

4.7 JianLiao

logs.SetLogger(logs.AdapterJianLiao, `{"authorname":"xxx","title":"beego", "webhookurl":"https://jianliao.com/xxx", "redirecturl":"https://jianliao.com/xxx","imageurl":"https://jianliao.com/xxx","level":1}`)

4.7 Slack

 logs.SetLogger(logs.AdapterSlack, `{"webhookurl":"https://slack.com/xxx","level":1}`)

5 自定义格式日志

beego 2.0版本的一个新特性是能够在日志发送到首选适配器之前对其应用自定义格式。下面是一个使用它的例子:

package main

import (
	"fmt"

	beego "github.com/beego/beego/v2/pkg"
	"github.com/beego/beego/v2/pkg/logs"
)

type MainController struct {
	beego.Controller
}


func customFormatter(lm *logs.LogMsg) string {
	return fmt.Sprintf("[CUSTOM FILE LOGGING] %s", lm.Msg)
}

func GlobalFormatter(lm *logs.LogMsg) string {
	return fmt.Sprintf("[GLOBAL] %s", lm.Msg)
}

func main() {

	beego.BConfig.Log.AccessLogs = true

	// GlobalFormatter only overrides default log adapters. Hierarchy is like this:
	// adapter specific formatter > global formatter > default formatter
	logs.SetGlobalFormatter(GlobalFormatter)

	logs.SetLogger("console", "")

	logs.SetLoggerWithOpts("file", []string{`{"filename":"test.json"}`}, customFormatter)

	beego.Run()
}

6 全局格式化程序

使用全局格式化程序,您可以覆盖和默认日志格式化程序。这意味着设置全局格式化程序将覆盖任何log . setlogger()适配器,但不会覆盖和logs.SetLoggerWithOpts()适配器。默认的日志格式化程序是使用以下语法设置的任何适配器:

logs.SetLogger("adapterName", '{"key":"value"}')

适配器特定的格式化程序

可以设置适配器特定的格式化程序,并将覆盖为给定适配器设置的任何默认或全局格式化程序。适配器特定的日志格式化程序可以使用以下语法进行设置:

logs.SetLoggerWithOpts("adapterName", []string{'{"key":"value"}'}, utils.KV{Key:"formatter", Value: formatterFunc})

参考文章:

https://www.fansimao.com/834484.html

https://www.xichangyou.com/834542.html

文章来源:https://blog.csdn.net/liu289747235/article/details/135685860
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。