beego的模块篇 - logs日志

本文详细介绍了如何在Beego框架中配置和使用不同的日志提供程序(如console、file、net、smtp等),包括设置日志级别、异步日志、记录调用者信息以及自定义日志格式。还概述了各种提供程序的配置选项和示例代码。
摘要由CSDN通过智能技术生成

支持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})
  • 34
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值